shell之文本过滤(grep)
shell之文本過濾(grep)
分類:?linux shell腳本學習2012-09-14 14:17?588人閱讀?評論(0)?收藏?舉報 shell正則表達式擴展工具存儲grep(全局正則表達式版本)允許對文本文件進行模式查找。如果找到匹配模式, grep打印包含模式的所有行。grep支持基本正則表達式,也支持其擴展集。
g r e p一般格式為:
grep [選項]基本正則表達式[文件]
這里基本正則表達式可為字符串。如果是字符串的時候請加上“”號,否則容易出錯。
?
常用的g r e p選項有:
-c? 只輸出匹配行的計數。
-i? 不區分大小寫(只適用于單字符) 。
-h? 查詢多文件時不顯示文件名。
-l? 查詢多文件時只輸出包含匹配字符的文件名。
-n? 顯示匹配行及行號。
-s? 不顯示不存在或無匹配文本的錯誤信息。
-v? 顯示不包含匹配文本的所有行。
?
grep和正則表達式
使用正則表達式使模式匹配加入一些規則,因此可以在抽取信息中加入更多選擇。使用正則表達式時最好用單引號括起來,這樣可以防止 g r e p中使用的專有模式與一些 s he l l 命令的特殊方式相混淆。
?
要用好grep這個工具,其實就是要寫好正則表達式,所以這里不對grep的所有功能進行實例講解,只列幾個例子,講解一個正則表達式的寫法。
$ ls -l | grep '^a'?
通過管道過濾ls -l輸出的內容,只顯示以a開頭的行。
$ grep 'test' d*?
顯示所有以d開頭的文件中包含test的行。
$ grep 'test' aa bb cc?
顯示在aa,bb,cc文件中匹配test的行。
$ grep '[a-z]/{5/}' aa?
顯示所有包含每個字符串至少有5個連續小寫字符的字符串的行。
$ grep 'w/(es/)t.*/1' aa?
如果west被匹配,則es就被存儲到內存中,并標記為1,然后搜索任意個字符(.*),這些字符后面緊跟著另外一個es(/1),找到就顯示該行。如果用egrep或grep -E,就不用"/"號進行轉義,直接寫成'w(es)t.*/1'就可以了。
grep正則表達式元字符集(基本集)
^?
錨定行的開始 如:'^grep'匹配所有以grep開頭的行。
$?
錨定行的結束 如:'grep$'匹配所有以grep結尾的行。
.?
匹配一個非換行符的字符 如:'gr.p'匹配gr后接一個任意字符,然后是p。
*?
匹配零個或多個先前字符 如:'*grep'匹配所有一個或多個空格后緊跟grep的行。 .*一起用代表任意字符。
[]?
匹配一個指定范圍內的字符,如'[Gg]rep'匹配Grep和grep。
[^]?
匹配一個不在指定范圍內的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行。
/(../)?
標記匹配字符,如'/(love/)',love被標記為1。
/<?
錨定單詞的開始,如:'/
/>?
錨定單詞的結束,如'grep/>'匹配包含以grep結尾的單詞的行。
x/{m/}?
重復字符x,m次,如:'0/{5/}'匹配包含5個o的行。
x/{m,/}?
重復字符x,至少m次,如:'o/{5,/}'匹配至少有5個o的行。
x/{m,n/}?
重復字符x,至少m次,不多于n次,如:'o/{5,10/}'匹配5--10個o的行。
/w?
匹配文字和數字字符,也就是[A-Za-z0-9],如:'G/w*p'匹配以G后跟零個或多個文字或數字字符,然后是p。
/W?
/w的反置形式,匹配一個或多個非單詞字符,如點號句號等。
/b?
單詞鎖定符,如: '/bgrepb/'只匹配grep。
?
轉載于:https://www.cnblogs.com/L-H-R-X-hehe/p/3816191.html
總結
以上是生活随笔為你收集整理的shell之文本过滤(grep)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何解决Filezilla 与虚拟机连接
- 下一篇: Vmware虚拟机三种网络模式配图详解