正規表示式

2021-09-26 06:37:11 字數 3822 閱讀 7541

目錄

grep

grep常用選項

awkawk常用關鍵字

sedsed選項含義:

sed例子

正規表示式原理圖

1. * 以前乙個字元作為參照匹配0次或多次

grep "a*" e-mail
2. ^ 以後乙個字元參照作為開頭

3.$以前乙個字元作為參照,表示結尾

4..任意字元出現一次

5. \轉義

6.[ ] 集合,一次僅代表乙個字元,[^]取非

7. 以前乙個為參照,該字元連續出現的頻率m到n次(可省略不能全部省略)

8.+ 出現一次或多次

例1 匹配**號碼

grep "^1[3-9][0-9]$" phone
例2 匹配郵箱

grep "^[_a-za-z0-9]\+@[a-za-z0-9]\+\.\(com\|net\|cn\)$" e-mail
9. ? 0次或一次

以下為擴充套件

10. \b匹配單詞邊界 例:er\b never ere 會匹配never

11.\b 匹配非單詞邊界

12. \cx 匹配控制字元(x可變)

13. \r 回車符

14. \n換行符

15. \f 換頁符

16. \t 製表符

17. \v 垂直製表符

18. \d 數字集合[0-9]

19. \d 非數字集合[^0-9]

20. \w [_a-za-z0-9]

21. \w

22.  \s [\r\n\f\t\v]

23. \s

-c 顯示匹配條數

-i 匹配時不區分大小寫

-h 匹配多檔案時只顯示匹配結果不顯示檔名

-l 匹配多檔案時不顯示匹配結果只顯示檔名

-v 顯示非匹配結果

-n 顯示匹配項的行及匹配結果

awk是一門語言,可以實現定義變數,流程結構迴圈等等

awk除了可以使用傳統的正則方式外還可以通過域分割便利的抽取指定資料(預設分隔符為空格)

awk在使用時可以指定分割的關鍵字:awk通過關鍵字對指定的字串進行切割,切割後形成位置變數,使用者訪問位置變數可以直接使用切割資料。

awk語法為:awk -option '' filename

-f 指定分隔符  例 -f":" 以冒號分割

例子1:awk -f":" 'begin end' /etc/passwd

其中:begin{}開始命令 ;{}迴圈命令 ;end{}結尾命令

例子2:awk -f":" -f secfile /etc/passwd  此句直接呼叫寫在secfile檔案中的section

secfile如下

begin

end

例子3:awk指令碼 #!/usr/bin/awk

awk指令碼如下(檔名為awkshell)

#!/usr/bin/awk -f

begin

end

然後執行  ./awkshell /etc/passwd

awk正規表示式

awk -option '/正規表示式/' filename : {}前面的表示條件

sed(命令) -option scrip filename

awk和grep可以查詢匹配項,但是沒有直接修改原檔案的功能,而sed可以直接修改原檔案

-i 可修改原檔案

--version            顯示sed版本。

--help               顯示幫助文件。

-n,--quiet,--silent    靜默輸出,預設情況下,sed程式在所有的指令碼指令執行完畢後,將自動列印模式空間中的內容,這些選項可以遮蔽自動列印。

-e script              允許多個指令碼指令被執行。

-f script-file,

--file=script-file        從檔案中讀取指令碼指令,對編寫自動指令碼程式來說很棒!

-i,--in-place        直接修改原始檔,經過指令碼指令處理後的內容將被輸出至原始檔(原始檔被修改)慎用!

-l n, --line-length=n    該選項指定l指令可以輸出的行長度,l指令用於輸出非列印字元。

--posix            禁用gnu sed擴充套件功能。

-r, --regexp-extended   在指令碼指令中使用擴充套件正規表示式

-s, --separate        預設情況下,sed將把命令列指定的多個檔名作為乙個長的連續的輸入流。gnu sed則允許把他們當作單獨的檔案, 這樣如正規表示式則不進行跨檔案匹配。

-u, --unbuffered      最低限度的快取輸入與輸出。

[wbm@wmblinux64 05sed]$ sed -n 'p' test.txt 

aaaa=111

bbbb=222

cccc=3333

dddd=44444

[wbm@wmblinux64 05sed]$

包括空行

[wbm@wmblinux64 05sed]$ sed -n '3,/ddd/p' testfile.txt 從第三行開始匹配,列印到含有ddd的行

[wbm@wmblinux64 05sed]$ sed -n '/^$/=' testfile.txt 列印空行35

6 [wbm@wmblinux64 05sed]$ sed -n -e '/^$/p' -e '/^$/=' testfile.txt 即列印空行又列印行號 3

5 6以上僅是sed程式本身的選項功能說明

這裡就簡單介紹幾個指令碼指令操作作為sed程式的例子。

i,insert 插入

d,delete 刪除

s,substitution 替換

查詢替換應用舉例

sed '2a type=ethernet' test.txt 第二行後新增type=ethernet

sed '3i type=ethernet' test.txt 第三行前新增type=ethernet

sed 's/yes/no/g' test.txt 將樣本檔案中的所有yes替換為no

sed '3,4d' test.txt 刪除第三行內容

下面是使用正規表示式定位操作行的示例:

sed '/222/a iiii=1111 ' testfile.txt

匹配到包含222的行,並在其後新增iiii=1111

sed '/^aaa/d' testfile.txt

匹配以aaaa開始的行,並刪除改行

需要執行多個指令時,可以使用以下三種方法:

#sed 's/yes/no/;s/static/dhcp/' test.txt 注:使用分號隔開指令。

#sed -e 's/yes/no/' -e 's/static/dhcp/' test.txt 注:使用-e選項。

#sed '

>s/yes/no/

>s/static/dhcp/' test.txt

sed指令碼檔案與awk類似

注:匹配多個選項可以把他們放在檔名之後

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...