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