linux grep和正则表达式
?雖然正則表達式經(jīng)常都在用,但是很少能夠靜下心來仔細的總結(jié)一下。最近看了一個臺灣人的網(wǎng)站叫做鳥哥Linux私房菜,關(guān)于正則表達式的描述挺詳細的。在此,我進行一下總結(jié),如果想仔細的學習正則表達式,請訪問鳥哥Linux私房菜,臺灣同胞的網(wǎng)站是繁體中文的,需要點兒耐心。
???? 正則表達式只是字符串的一種描述,只有和支持正則表達式的工具相結(jié)合才能進行字符串處理。本文以grep為例來講解正則表達式。
grep命令
功能:輸入文件的每一行中查找字符串。
基本用法:
grep [-acinv] [--color=auto] [-A n] [-B n] '搜尋字符串' 文件名 參數(shù)說明: -a:將二進制文檔以文本方式處理 -c:顯示匹配次數(shù) -i:忽略大小寫差異 -n:在行首顯示行號 -A:After的意思,顯示匹配字符串后n行的數(shù)據(jù) -B:before的意思,顯示匹配字符串前n行的數(shù)據(jù) -v:顯示沒有匹配行-A:After的意思,顯示匹配部分之后n行-B:before的意思,顯示匹配部分之前n行 --color:以特定顏色高亮顯示匹配關(guān)鍵字???? –color選項是個非常好的選項,可以讓你清楚的明白匹配了那些字符。最好在自己的.bashrc或者.bash_profile文件中加入:
alias grep=grep --color=auto???? 每次grep搜索之后,自動高亮匹配效果了。
???? ‘搜尋字符串’是正則表達式,注意為了避免shell的元字符對正則表達式的影響,請用單引號(’’)括起來,千萬不要用雙引號括起來("”)或者不括起來。
???? 正則表達式分為基本正則表達式和擴展正則表達式。下面分別簡單總結(jié)一下。
基本正則表達式
???? 正則表達式學習,主要是對正則表達式元數(shù)據(jù)的學習。正則表達式本身沒有什么高深的東西,本文僅僅對基本正則表達式的元數(shù)據(jù)進行一下總結(jié):
| 元數(shù)據(jù) | 意義和范例 |
| ^word | 搜尋以word開頭的行。 ? 例如:搜尋以#開頭的腳本注釋行 grep –n ‘^#’ regular.txt ? |
| word$ | 搜尋以word結(jié)束的行 ? 例如,搜尋以‘.’結(jié)束的行 grep –n ‘.$’ regular.txt ? |
| . | 匹配任意一個字符。 ? 例如:grep –n ‘e.e’ regular.txt 匹配e和e之間有任意一個字符,可以匹配eee,eae,eve,但是不匹配ee。 ? |
| \ | 轉(zhuǎn)義字符。 ? 例如:搜尋’,’是一個特殊字符,在正則表達式中有特殊含義。必須要先轉(zhuǎn)義。 grep –n ‘\” regular.txt ? |
| * | 前面的字符重復0到多次。 ? 例如匹配gle,gogle,google,gooogle等等 grep –n ‘go*gle’ regular.txt ? |
| [list] | 匹配一系列字符中的一個。 ? 例如:匹配gl,gf。 grep –n ‘g[lf]’ regular.txt ? |
| [n1-n2] | 匹配一個字符范圍中的一個字符。 ? 例如:匹配數(shù)字字符 grep –n ‘[0-9]’ regular.txt ? |
| [^list] | 匹配字符集以外的字符 ? 例如:grep –n ‘[^o]‘ regular.txt 匹配非o字符 ? |
| \{n1,n2\} | 前面的字符重復n1,n2次 ? 例如:匹配google,gooogle。 grep –n ‘go\{2,3\}gle’ regular.txt ? |
| \<word | 單詞是的開頭。 ? 例如:匹配以g開頭的單詞 grep –n ‘\<g’ regular.txt ? |
| word\> | 匹配單詞結(jié)尾 ? 例如:匹配以tion結(jié)尾的單詞 grep –n ‘tion\>’ regular.txt ? |
擴展正則表達式
???? grep一般情況下支持基本正則表達式,可以通過參數(shù)-E支持擴展正則表達式,另外grep單獨提供了一個擴展命令叫做egrep用來支持擴展正則表達式,這條命令和grep -E等價。雖然一般情況下,基本正則表達式就夠用了。特殊情況下,復雜的擴展表達式,可以簡化字符串的匹配。
???? 擴展正則表達式就是在基本正則表達式的基礎上,增加了一些元數(shù)據(jù)。
| 元數(shù)據(jù) | 意義和范例 |
| + | 重復前面字符1到多次。 ? 例如:匹配god,good,goood等等字符串。 grep –nE go+d’ regular.txt ? |
| ? | 匹配0或1次前面的字符 ? 例如,匹配gd,god grep –nE ‘go?d’ regular.txt ? |
| | | 或(or)的方式匹配多個字串?? 例如:grep –nE ‘god|good’ regular.txt ? 匹配god或者good。 ? |
| () | 匹配整個括號內(nèi)的字符串,原來都是匹配單個字符 ? 例如:搜尋good或者glad grep –nE ‘g(oo|la)’ regular.txt ? |
| () | 前面的字符重復0到多次。 ? 例如匹配gle,gogle,google,gooogle等等 grep –nE ‘go*gle’ regular.txt ? |
???? Linux下面正則表達式博大精深,上文支持總結(jié)了最常用的部分,如果熟練掌握的上面部分的正則表達式基本上可以滿足日常使用了。
???? 另外Linux很多命令支持正則表達式,比如find,sed,awk等
轉(zhuǎn)載于:https://www.cnblogs.com/onmyway20xx/p/4635195.html
總結(jié)
以上是生活随笔為你收集整理的linux grep和正则表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [译] 提高日志质量的 5 大技巧
- 下一篇: VMware网络配置详解