轉(zhuǎn)自:https://www.cnblogs.com/sheeva/p/6406285.html
作為一個(gè)偏愛windows的程序員,以前做文本處理的時(shí)候總是喜歡在windows下用notepad++等圖形化工具處理,比如有時(shí)需要把linux服務(wù)器上一個(gè)文件進(jìn)行一次全局字符串替換這樣簡(jiǎn)單的操作,還得把文件down到本地編輯好再傳回去。這兩天買了本《鳥哥的Linux私房菜》,終于靜下心系統(tǒng)的學(xué)習(xí)了一下linux下的文本處理,感覺其實(shí)沒有想象的難,如果早點(diǎn)學(xué)會(huì)節(jié)約下來的大量時(shí)間肯定遠(yuǎn)超過學(xué)習(xí)所花的時(shí)間。
先說一下本文要介紹的內(nèi)容:
簡(jiǎn)單回顧一下正則表達(dá)式,如果熟悉正則,至少知道正則分為基本正則和擴(kuò)展正則可以跳過該部分。
本文主體:介紹4個(gè)linux文本處理命令:grep、sed、printf、awk。
下面正式開始。
這部分是給會(huì)正則表達(dá)式的讀者簡(jiǎn)單回顧一下正則表達(dá)式,如果沒學(xué)過正則表達(dá)式的讀者建議先找相關(guān)資料學(xué)習(xí)正則表達(dá)式再來看本文。
正則表達(dá)式分為基本正則表達(dá)式和擴(kuò)展正則表達(dá)式,內(nèi)容如下:
正則表達(dá)式字符
含義
^word
查找以word開頭的文本
word$
查找以word結(jié)尾的文本
代表一個(gè)任意字符
轉(zhuǎn)義符
0到多個(gè)字符
[abc]
代表一個(gè)字符,這個(gè)字符是a或b或c
[a-z];[0-9]
代表a到z中的一個(gè)字符;0到9中的一個(gè)數(shù)字
[^abc]
代表一個(gè)非a、b、c的字符
{m,n}
m到n個(gè)字符
正則表達(dá)式字符
含義
一個(gè)或多個(gè)字符
零個(gè)或一個(gè)字符
或者
分組
grep的作用是按行查找字符,輸出包含字符的行。
grep用法:
grep一般有兩種用法,一種是從文件查找,一種是從管道的輸入查找,
grep 'word' file.txt
cat file.txt|grep 'word'
grep的常用參數(shù):
參數(shù)
含義及示例
輸出結(jié)果加行號(hào)
--color=auto
匹配的關(guān)鍵字高亮顯示
輸出匹配行的后三行
-B2
輸出匹配行的前兩行
-v
反向查找,即輸出不包含關(guān)鍵字的行
關(guān)鍵字匹配時(shí)忽略關(guān)鍵字大小寫
grep使用小技巧:
多數(shù)情況我們都想要高亮關(guān)鍵詞(使用--color=auto參數(shù)),因此可以在~/.bashrc文件中添加上:
alias grep='grep --color=auto'
,再用
source ~/.bashrc
讓配置生效。這樣當(dāng)我們使用grep的時(shí)候,就自動(dòng)帶了--color=auto參數(shù)。
grep使用示例:
grep的查找主要就是基于基本正則表達(dá)式的匹配,下面只是簡(jiǎn)單的給一些常用例子供參考。
grep 't[ae]st'//查找tast或test
grep '[0-9]' //查找數(shù)字
grep '[^a-z]oo'//查找Xoo,其中X是一個(gè)非a到z的字符
grep '^the'//查找以the開頭的字符,這里注意區(qū)分^出現(xiàn)在[]里時(shí)代表“非某字符”,如上個(gè)例子,出現(xiàn)在[]外時(shí)代表"以某字符開頭",如這個(gè)例子。
grep '^$'//查找空行
grep 'o\{2\}'//查找兩個(gè)o,這里需要注意,{}在shell里有特殊意義,因此需要轉(zhuǎn)義,這里與一般的正則使用不同,需要注意。
egrep:
我們知道正則表達(dá)式分為基本正則表達(dá)式和擴(kuò)展正則表達(dá)式,但是grep只支持基本正則表達(dá)式,如果要是用擴(kuò)展正則表達(dá)式,需要使用egrep命令。
幾個(gè)例子:
egrep 'gd|good'//查找gd或good
egrep 'g(la|oo)d'//查找glad或good
egrep 'A(xyz)+C'//查找AXC,其中X是一個(gè)或一個(gè)以上的'xyz'字符串。