正則表達式/通配符/歸檔

目錄: 

第1章 三劍客之一 awk
1.1 awk字符參數統計表
1.2 參數字符舉例 php


第2章 三劍客之二 sed
2.1 sed字符參數統計表
2.2 參數字符舉例 python


第3章 三劍客之三 grep
3.1 參數字符統計表
3.2 參數字符舉例linux

第4章 通配符
4.1 通配符統計表格
4.2 通配符舉例 nginx


第5章 特殊符號
5.1 特殊符號統計表 web


第6章 三劍客的正則表達式
6.1 正則表達式的定義
6.2 正則表達式的運用區分通配符
6.3 正則表達式的注意事項
6.4 正則表達式的分類
6.5 三劍客正則表達式字符統計表 正則表達式

 

 

三劍客特殊字符及參數歸檔

 

第1章 三劍客之一 awk

命令解釋awk是一種編程語言,用於在linux/unix下對文本和數據進行處理。數據能夠來自標準輸入(stdin)、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更可能是做爲腳原本使用。awk有不少內建的功能,好比數組、函數等,這是它和C語言的相同之處,靈活性是awk最大的優點。express

1.1 awk字符參數統計表


1.2 參數字符舉例

1.2.1 NR例

題意:取出ett.txt 中第25行到第30行編程

[root@oldboy34 data]# awk 'NR>=25&&NR<=30' ett.txtapi

25數組

26

27

28

29

30

1.2.2 ! 例

awk '!/oldboy/' test.txt

test

liyao

1.2.3 '{print $2,$3}' 列

表示取出第2例和第3例

[root@oldboy-muban data]# ls -l 

total 20 

drwxr-xr-x. 2 root root 4096 Jan 6 17:56 a 

drwxr-xr-x. 2 root root 4096 Jan 6 17:56 b 

drwxr-xr-x. 2 root root 4096 Jan 6 17:56 c 

drwxr-xr-x. 2 root root 4096 Jan 6 17:56 d 

-rw-r--r--. 1 root root 97 Dec 23 19:45 oldboy.txt 

[root@oldboy-muban data]# ls -l |awk '{print $2,$3}' 

20 

2 root 

2 root 

2 root 

2 root 

1 root
1.2.4 . (點) 例

取所有

1.2.5 '$2>1' 例

ls -l |awk '$2>1' 顯示出第二列數值>1 的每行

[root@oldboy-muban ~]# ls -l |awk '$2>1'

total 36

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 a

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 b

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 c

1.2.6 -F "" 例

經常使用格式 awk -F " 指定內容" '{print $4第四行,$6 }’ oldboy.txt

[root@oldboy-muban oldboy]# cat oldboy.txt

I am oldboy,myqq is 31333741

[root@oldboy-muban ~]# awk -F "[ ,]" '{print $3,$6}' /oldboy/oldboy.txt

oldboy 31333741

1.2.7 -F "[ ]" 例

-F "[空格 ,]" 指定多把菜刀 分別以 空格和 ,號當分割符號

[root@oldboy-muban ~]# awk -F "[ ,]" '{print $3,$6}' /oldboy/oldboy.txt

oldboy 31333741

1.2.8 '{print $3" 12345 "$6}'例

顯示列中插入 12345 可是顯示內容要加 '' "

[root@oldboy-muban oldboy]# awk -F "[ ,]" '{print $3" 12345 "$6}' oldboy.txt

oldboy 12345 31333741

1.2.9 NR $n組合 例

print 和NR 組合爲輸出的列顯示行號

NR表示行號(第幾行) $0 表示整列(表示取第幾列)

[root@oldboy-muban logs]# echo stu{1..6} |xargs -n2 >ett.txt 插入兩行

[root@oldboy-muban logs]# cat ett.txt

stu1 stu2

stu3 stu4

stu5 stu6

[root@oldboy-muban ~]# awk '{print NR,$0}' nginx.conf (NR表示第幾行開始標記行號$0表示所有列)

1 stu1 stu2

2 stu3 stu4

3 stu5 stu6

[root@oldboy-muban ~]# awk '{print NR,$2}' nginx.conf ($2 第二列 並默認從頭行標號)

1 stu2

2 stu4

3 stu6

[root@oldboy-muban ~]# awk '{print NR==1,$2}' nginx.conf (NR==1給指定行標註1

1 stu2

0 stu4

0 stu6

1.2.10 '/ ^d/' 例

awk '/ ^d/' ( ^ 特殊字符 表示以d開頭的文件或字符)

因此:ls -l | awk '/^d /'

[root@oldboy-muban ~]# ls -l

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 a

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 b

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 c

-rw-r--r--. 1 root root 0 Jan 3 10:15 jeacen

-rw-r--r--. 1 root root 0 Jan 9 16:35 nginx.conf

drwxr-xr-x. 7 root root 4096 Jan 3 10:15 oldboy

[root@oldboy-muban ~]# ls -l |awk '/^d/'

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 a

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 b

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 c

第2章 三劍客之二 sed

命令解釋:sed是一種流編輯器,它是文本處理中很是中的工具,可以完美的配合正則表達式使用,功能與衆不同。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲「模式空間」(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並無 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操做;編寫轉換程序等。

2.1 sed字符參數統計表

2.1.2 指定範圍

2.1.3特殊符號小結

2.2 參數字符舉例

2.2.1 用sed 刪除文件1.txt中的空行

##刪除文件中的空行兩種方法

方法一: sed  -r  '/^$|^[ \t]+$/d

方法二: sed  -r  '/^[ \t]*$/d'

 

環境以下

[root@oldboy-muban ~]# cat  1.txt

oldboy

 

zhabanzhang

           

    zbanz

 

oldboy

 

[root@oldboy-muban ~]# cat -A 1.txt

oldboy$

$

zhabanzhang$

^I^I^I$

^Izbanz$

$

oldboy$

 

方法一:

[root@m01 ~]# sed  -r  '/^$|^[ \t]+$/d' 1.txt

oldboy

zhabanzhang

    zbanz

oldboy

方法二:

[root@m01 ~]# sed -r '/^[ \t]*$/d' 1.txt

oldboy

zhabanzhang

    zbanz

oldboy

2.2.2 刪除連續多行演示 ,號

[root@oldboy-muban ~]# sed 'd' person.txt

[root@oldboy-muban ~]# sed '2,3d' person.txt

101,oldboy,CEO

104,yy,CFO

105,feixue,CIO

[root@oldboy-muban ~]# sed '2,3!d' person.txt

102,zhangyao,CTO

103,Alex,COO

2.3.3 刪除不連續行 ;號

[root@oldboy-muban ~]# sed '3d;5d' person.txt

101,oldboy,CEO

102,zhangyao,CTO

104,yy,CFO

注意:正則不肯定性 工做中用數字刪

2.2.4 w另存

[root@oldboy-muban ~]# sed 'w oldboy123.txt' person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[root@oldboy-muban ~]# ls

01       1.txt.bak  anaconda-ks.cfg  install.log  oldboy123.txt  pass.txt    person.txt  wangxiaog.txt   wxd.sh

 

                                                    

2.2.5 -n p 例

該命令一塊兒使用表示只打印那些發生替換的行(取消默認輸出)

   格式:sed  -n  ' 20p'  

只查看ett.txt文件(共100行)內第20到第30行的內容

[root@oldboy34 data]# sed -n  '20,30p' ett.txt

20

21

22

23

24

25

26

27

28

29

30

2.2.6 's###g' 例

[root@oldboy-muban data]# cat ett.txt

I am oldboy,myqq is 31333741

[root@oldboy-muban data]# sed "s#,myqq is# #g" ett.txt |sed "s#I am##g"

 oldboy  31333741

 

2.2.7 sed -r 's#.(.).(.).(.)#\1\2\3#g' 例

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.)....#\1#g'

2

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#\1\2\3#g'

246

反向引用的兩組字符中能夠插入內容

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#\1,\2#g'

2,4

 

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#\1,\2,\3#g'

2,4,6

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#\1:\2:\3#g'

2:4:6

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#\1+\2+\3#g'

2+4+6

反向引用出來的字符後也能夠插入內容

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#\1,2#g'

2,2

 

 

2.2.8 sed -r  反向引用調換passwd 首列和尾列

[root@oldboy-muban oldboy]# head -1 passwd

root:x:0:0:root:/root:/bin/bash

[root@oldboy-muban oldboy]# sed -r 's#(^root)(:.*:)(/b.*sh$)#\3\2\1#g' passwd |head -1

/bin/bash:x:0:0:root:/root:root

[root@oldboy-muban oldboy]# sed -r 's#(root)(:x.*:)(/b.*sh$)#\3\2\1#g' passwd |head -1

/bin/bash:x:0:0:root:/root:root

 

2.2.9 刪除文件每行的第二個字符

[root@oldboy-muban ~]# sed -r 's#.##2' /etc/passwd |head -5

rot:x:0:0:root:/root:/bin/bash

bn:x:1:1:bin:/bin:/sbin/nologin

demon:x:2:2:daemon:/sbin:/sbin/nologin

am:x:3:4:adm:/var/adm:/sbin/nologin

l:x:4:7:lp:/var/spool/lpd:/sbin/nologin

2.2.10  刪除文件每行的倒數第二個字符

[root@oldboy-muban ~]# sed -r 's#.(.)$##g' /etc/passwd |head -5

root:x:0:0:root:/root:/bin/ba

bin:x:1:1:bin:/bin:/sbin/nolog

daemon:x:2:2:daemon:/sbin:/sbin/nolog

adm:x:3:4:adm:/var/adm:/sbin/nolog

lp:x:4:7:lp:/var/spool/lpd:/sbin/nolog

2.2.11 刪除文件每行的第二個單詞

[root@oldboy-muban ~]# sed -r 's#[a-z]+##2' /etc/passwd |head -5

root::0:0:root:/root:/bin/bash

bin::1:1:bin:/bin:/sbin/nologin

daemon::2:2:daemon:/sbin:/sbin/nologin

adm::3:4:adm:/var/adm:/sbin/nologin

lp::4:7:lp:/var/spool/lpd:/sbin/nologin

[root@oldboy-muban ~]#

2.2.12 刪除倒數第二單詞

方法一

[root@oldboy-muban ~]# sed -r 's#[a-z]+/([a-z]+$)#/\1#g' /etc/passwd |head -1

root:x:0:0:root:/root://bash

方法二

[root@oldboy-muban ~]# sed -r 's#[a-z]+##5' /etc/passwd |head -1

root:x:0:0:root:/root://bash

2.2.13 交換每行的第一個字符和第二個字符

[root@oldboy-muban ~]# sed -r 's#(^.)(.)#\2\1#g'  /etc/passwd |head -1

orot:x:0:0:root:/root:/bin/bash

2.2.14 交換每行的第一個字符和第二個單詞。

2.2.15 刪除每行開頭的全部空格

sed -r 's#[ ]+##g' /etc/passwd

2.2.16 用製表符替換文件中出現的全部空格

sed -r 's#[ ]+#\t#g' /etc/passwd

2.2.17 把全部大寫字母用括號()括起來

sed -r 's#([ A-Z])#(\1)#g' /etc/passwd

 

2.2.18 &符號表示被替換的內容

[root@oldboy-muban ~]# sed -r 's#(.*),(.*),(.*)#&.................\1 \2 \3#g' person.txt

101,oldboy,CEO.................101 oldboy CEO

102,zhangyao,CTO.................102 zhangyao CTO

103,Alex,COO.................103 Alex COO

104,yy,CFO.................104 yy CFO

105,feixue,CIO.................105 feixue CIO

 

[root@oldboy-muban ~]# sed -r 's#(.*),(.*),(.*)#&.................\1 \2 \3#' person.txt

101,oldboy,CEO.................101 oldboy CEO

102,zhangyao,CTO.................102 zhangyao CTO

103,Alex,COO.................103 Alex COO

104,yy,CFO.................104 yy CFO

105,feixue,CIO.................105 feixue CIO

 

2.2.19 例  rename  ""  ""  file*

[root@oldboy-muban test]# ls |xargs -n1

stu_102999_1_finished.jpg

stu_102999_2_finished.jpg

stu_102999_3_finished.jpg

stu_102999_4_finished.jpg

stu_102999_5_finished.jpg

[root@oldboy-muban test]# ls |xargs -n1 |sed -r 's#(.*)_(.*)_(.*)_(.*)#mv &  \1_\2_\3.jpg  #g' |bash

[root@oldboy-muban test]# ls

stu_102999_1.jpg  stu_102999_2.jpg  stu_102999_3.jpg  stu_102999_4.jpg  stu_102999_5.jpg

[root@oldboy-muban test]# ls -l

total 0

-rw-r--r-- 1 root root 0 Feb 22 15:22 stu_102999_1.jpg

-rw-r--r-- 1 root root 0 Feb 22 15:22 stu_102999_2.jpg

-rw-r--r-- 1 root root 0 Feb 22 15:22 stu_102999_3.jpg

-rw-r--r-- 1 root root 0 Feb 22 15:22 stu_102999_4.jpg

-rw-r--r-- 1 root root 0 Feb 22 15:22 stu_102999_5.jpg

 

2.2.20 按正則輸出行

[root@oldboy-muban ~]#  sed -rn '/oldboy|Alex/p' person.txt

101,oldboy,CEO        

103,Alex,COO

[root@oldboy-muban ~]#

 

2.2.21 例:sed -r 's#(.*),(.*),(.*)

題:以下取出  第一行 和 uid後面的數字

[root@fifi tmp]# cat  /tmp/test.txt

//xcbb_web/mobileLive/searchRecentUserLiveResult channel=App%20Store&clientType=1&packageName=com.prsoft.vncShow&page=1&pageSize=50&province=%E7%83%AD%E9%97%A8&sex=2&token=TWpBd05UZ3lNVFRDcDNScmQyeHlNM3BtYTNVeE5UQTFNVFF4TURnNU5ESTR3cWN4TlRFeE16WTRNalEzTURBMw%3D%3D&type=3&uid=20058214&version=1.1.1 "-"

//xcbb_web/business/mobile/api/getActiviWeekStarTask uid=20016107&token=TWpBd01UWXhNRGZDcHpOMmVEQjZhakYwZW5JeE5EazRPRGN3TURVME9Ua3d3cWN4TlRFeE56a3pPVEU0TURNdw==

方法:

[root@fifi tmp]# sed -r 's#(^//.*)/.*uid=(.*).&(.*$)#\1,\2#g'  /tmp/test.txt |awk -F "[ / ,]+" '{print $2,$NF }'

xcbb_web 2005821

xcbb_web 2001610

 

2.2.22 sed -nr '/ /,/ /p'

sed -n '/2018-06-21 09:10:43/,/2018-06-21 09:50:/p' catalina.out  > /tmp/1.txt

 

 

 

第3章 三劍客之三 grep

命令解釋:grep (global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。

3.1 參數字符統計表


3.2 參數字符舉例

3.2.1 -v例

grep -v "oldboy" test.txt

root@oldboy34 ~]# cat text.txt

test

liyao

oldboy

[root@oldboy34 ~]# grep -v "oldboy" text.txt

test

liyao

3.2.2 -A 、-B、-C 例

-A 10 after 顯示你要找的行,及他後面的10

-B 10 before 顯示你要找的行,及他前面的10

-C 10 context 找到你要找的行,及他前面的10和後面的10

[root@oldboy-muban ~]# grep -A 5 10 oldgil.txt

10

11

12

13

14

15

3.2.3 配合 cat-n

來使用 表示插入行號

[root@oldboy-muban ~]# cat -n oldboy.txt| grep -A 2 7

7 jfdslj

8 jsdl

3.2.4 -i 例

grep -i 不區分大小寫

oldpwd = cd -

root@oldboy-muban oldboy]# pwd
/oldboy
[root@oldboy-muban oldboy]# cd -
/tmp
[root@oldboy-muban tmp]# env |grep -i "oldpwd"
OLDPWD=/oldbo

3.2.5 -n "." 例

grep -n 過濾後標註行號

[root@oldboy-muban ~]# grep -n "stu" nginx.conf
1:stu1
2:stu2

[root@oldboy-muban ~]# grep -n "." nginx.conf (.表示當前列中的任意字符)

1:stu1

2:stu2

3.2.6 egrep = grep -E 例 (取多行)

[root@oldboy-muban oldboy]# cat oldboy.txt

I am oldboy,myqq is 31333741

[root@oldboy-muban ~]# awk -F "[ ,]" '{print $3,$6}' /oldboy/oldboy.txt|grep -E "oldboy|31333741 "

oldboy 31333741

3.2.7 grep -o 和egrep -o 例

[root@oldboy-muban logs]# cat ett.txt

stu1 stu2

stu3 stu4

stu5 stu6

[root@oldboy-muban logs]# grep -o "stu4" ett.txt

stu4

[root@oldboy-muban logs]# egrep -o "stu4|stu5" ett.txt

stu4

stu5

第4章 通配符

4.1 通配符統計表格

 


4.2.1
* 例4.2 通配符舉例

stu* *.log 以什麼開頭或以什麼結尾的所有文件

[root@oldboy-muban logs]# ls oldboy*

oldboy01.txt oldboy03.txt oldboy05.txt oldboy07.txt oldboy09.txt

oldboy02.txt oldboy04.txt oldboy06.txt oldboy08.txt

[root@oldboy-muban logs]# ls *.txt

ett.txt oldboy02.txt oldboy04.txt oldboy06.txt oldboy08.txt

oldboy01.txt oldboy03.txt oldboy05.txt oldboy07.txt oldboy09.txt

4.2.2 ?? 例

?? ??? 任何一個文本/字符

ls ?

[root@oldboy-muban logs]# ls

1 2 4 ett.txt.bak oldboy02.txt oldboy04.txt oldboy06.txt

1.2 3 ett.txt oldboy01.txt oldboy03.txt

[root@oldboy-muban logs]# ls ?

1 2 3 4

4.2.3 [abcd] 例

[abcd] 表示一個總體裏面有四種狀況 [] 表示一個總體 要找 a或b或 c或 d

*[abcd]

*[abcd]*

*[abcd]*

[root@oldboy-muban logs]# ls *[1-4]*

oldboy01.txt oldboy02.txt oldboy03.txt oldboy04.txt

stu1:

stu2:

stu3:

stu4:

4.2.4 {…} 例

echo {0..10} {a..z} {z..a} 生成序列一連串的文本

oldboy{01..10} 生成一連串的文件或目錄

c{a,b} c{,b} {a,b,c}{1,2,3} 生成的分別匹配的序列

seq 20 120 > ett.txt (生成20-120) seq 1 2 10 |xargs ( 生成奇數)

c{,b}

[root@oldboy-muban logs]# ls

ett.txt stu1 stu2 stu3 stu4 stu5

[root@oldboy-muban logs]# cp ett.txt{,.bak}

[root@oldboy-muban logs]# ls

ett.txt ett.txt.bak stu1 stu2 stu3 stu4 stu5

{1..5}{a..d}

[root@oldboy-muban logs]# touch stu{1..5}{a..d}

[root@oldboy-muban logs]# ls

1.2 ett.txt.bak stu1b stu1d stu2b stu2d stu3b stu3d stu4b stu4d stu5b stu5d

ett.txt stu1a stu1c stu2a stu2c stu3a stu3c stu4a stu4c stu5a stu5c

4.2.5 [!abc] 或[^abc] 例

oldboy[^4-8].txt

[root@oldboy-muban logs]# ls -l oldboy0[^4-8].txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy01.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy02.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy03.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy09.txt

oldboy[^678].txt

[root@oldboy-muban logs]# ls -l oldboy0[^678].txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy01.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy02.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy03.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy04.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy05.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy09.txt

4.2.6 注意問題

{無空格要,號}

[root@oldboy-muban logs]# echo {1..5}{ a..f}

1{ 2{ 3{ 4{ 5{ a..f}

{裏面不能接路徑}

[root@oldboy-muban logs]# cp ett.txt{,/tmp/.bak}

cp: accessing `ett.txt/tmp/.bak': Not a directory

第5章 特殊符號

5.1 特殊符號統計表

第6章 三劍客的正則表達式

6.1 正則表達式的定義

廣義:

一、正則表達式就是爲了處理大量的文本|字符串而定義的一套規則和方法。

二、經過定義的這些特殊符號的輔助,系統管理員就能夠快速過濾,替換或輸出須要的字符串,Linux正則表達式通常以行爲單位處理。

簡單理解:

一、爲處理大量文本|字符串而定義的一套規則和方法

二、以行爲單位出來

正則表達式是一種描述一組字符串的模式,;相似於數學表達式,經過各類操做符 組成更小的表達式。

6.2 正則表達式的運用區分通配符

運用:大齡過濾日誌工做,化繁爲易 更簡單,高效,易用。

區分:三劍客都支持,並且運用很是普遍(php per python 都支持)

ls* 支持通配符

正則表達式用來找 文件內容,文本 字符串

通配符用來找文件名或文件普通命令都支持

6.3 正則表達式的注意事項

1、正則表達式是 以行爲單位處理字符串

2、顏色別名 通常配合grep egrep 來學習

例:配置別名

[root@oldboy-muban ~]# alias

alias cp='cp -i'

alias egrep='egrep --color=auto'

alias grep='grep --color=auto'

alias l.='ls -d .* --color=auto'

alias ll='ls -l --color=auto'

alias ls='ls --color=auto'

alias mv='mv -i'

alias rm='rm -i'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

3、注意字符集

6.4 正則表達式的分類

基本正則表達式(BRE —— basic regular expression)

高級功能擴展正則表達式(ERE —— extended regular expression

③BRE和ERE 的區別僅僅是元字符的不一樣

BRE支持的元字符有(^ $ . [ ] * )其餘字符識別爲普通字符:\(\)

E RE添加了() { } ? + | 等

只有在用反斜槓「\」進行轉義的狀況下,字符( ){ } 纔會在BRE被當作元字符處理

在ERE中,任何元符號前面加上反斜槓反而會使其被當作普通字符來處理

6.5 三劍客正則表達式字符統計表

相關文章
相關標籤/搜索