歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> linux正則表達式 grep egrep用法

linux正則表達式 grep egrep用法

日期:2017/2/27 16:02:07   编辑:Linux教程
shell命令執行的相應順序
&&
命令1 && 命令2 如果這個命令1執行成功&&那麼執行這個命2
mv myfile myfile2 && echo "if you are seeing this then mv was success!"

||
如果||左邊的命令(命令1)未執行成功,那麼就執行||右邊的命令(命令2)

mv myfile myfile2 && echo "if you are seeing this then mv was success! "

從一個審計文件中抽取第1個和第2個域,並將其輸出到一個臨時文件中,如果這一操作未成功,我希望能夠收到一個相應郵件:

awk '{print$1,$2}' test3 >test2 || echo "sorry the extraction didn't work " | mail root


(命令1;命令2;. . .)
如果使用{ }來代替(),那麼相應的命令將在子shell而不是當前shell中作為一個整體被執行,只有在{ }中所有命令的輸出作為一個整體被重定向時,其中的命令才被放到子shell中執行,否則在當前shell執行。

例子:
如果sort命令執行成功了,可以先將輸出文件備份,然後再打印
test.sorted && (cp test.sorted test.sorted_bak ;lp test.sorted)

經常使用的正則表達式舉例
^ 行首
$ 行尾
^[the] 以the開頭行
[Ss]igna[lL] 匹配單詞signal、signaL、Signal、SignaL
[Ss]igna[lL]". 同上,但加一句點
[mayMAY ] 包含may大寫或小寫字母的行
^USER$ 只包含USER的行
[tty]$ 以tty結尾的行
". 帶句點的行
^d..x..x..x 對用戶、用戶組及其他用戶組成員有可執行權限的目錄
^[^l] 排除關聯目錄的目錄列表
^[^d] ls –l | grep ^[^d] 只顯示非文件夾的文件
[.*0] 0之前或之後加任意字符
[000*] 000或更多個
[iI] 大寫或小寫I
[iI][nN] 大寫或小寫i或n
[^$] 空行
[^.*$] 匹配行中任意字符串
^......$ 包括6個字符的行
[a-zA-Z] 任意單字符
[a-z][a-z]* 非數字或美元標識
[^0-9A-Za-z] 非數字或字母
[123] 1到3中一個數字
[Dd]evice 單詞device或Device
De..ce 前兩個字母為De,後跟兩個任意字符,最後為ce
"^q 以^q開始行
^.$ 僅有一個字符的行
^".[0-9][0-9] 以一個句點和兩個數字開始的行
'"Device"' 單詞device
De[Vv]ice". 單詞Device或device
[0-9]"{2"}-[0-9]"{2"}-[0-9]"{4"} 對日期格式dd-mm-yyyy
[0-9]"{3"}".[0-9]"{3"}".[0-9]"{3"}".[0-9]"{3"} IP地址格式
[^.*$] 匹配任意行
[A-Za-z]* 匹配所有單詞

常用的grep選項
-c 只輸出匹配行的計數。
-i 不區分大小寫(只適用於單字符)。
-h 查詢多文件時不顯示文件名。
-l 查詢多文件時只輸出包含匹配字符的文件名。
-n 顯示匹配行及行號。
-s 不顯示不存在或無匹配文本的錯誤信息。
-v 顯示不包含匹配文本的所有行。

例子
grep -v "Sort" tab2 顯示不包含匹配文本的所有行
grep -n "Sort" tab2 顯示匹配行及行號
grep -c "Sort" tab2 只輸出匹配行的計數

精確匹配: grep "01">" tab2
grep -in "code" tab2 忽略大小寫

多次過濾
grep -in "code" tab2 | grep "02"
使用grep匹配“與”或者“或”模式

grep命令加-E參數,這一擴展允許使用擴展模式匹配。例如,要抽取城市代碼為219或216,方法如下:
grep –E ‘219|216’ tab2

grep允許使用國際字符模式匹配或匹配模式的類名形式。

類 等價的正則表達式[[:upper:]] [A-Z]
[[:alnum:]] [0-9a-zA-Z]
[[:lower:]] [a-z]
[[:space:]] 空格或t a b鍵
[[:digit:]] [0-9]
[[:alpha:]] [a-zA-Z]

大多數系統管理員稱/dev/null為比特池, 可以將之看成一個無底洞,有進沒有出,永遠也不會填滿。
要查看DNS服務器是否正在運行(通常稱為named),方法如下
ps -ef | grep "name"|grep -v "grep"

egrep
egrep接受所有的正則表達式,一個顯著特性是可以以一個文件作為保存的字符串,然後將之傳給egrep作為參數,為此使用- f開關。
egrep -f par2 tab2 par2是文件,裡面包括各種匹配的具體格式

如果要查詢存儲代碼3 2 L或2 C C,可以使用(|)符號,意即“|”符號兩邊之一或全部。
egrep '(Code|Sort)' tab2
Copyright © Linux教程網 All Rights Reserved