正则表达式||grep的使用
??? 在編寫程序時,或者編寫網頁時,在處理一些不固定的字符時,我們通常會使用形如:. * ?等字符,而我們就把這稱作是正則表達式,尤其是我們在瀏覽一些網站進行用戶注冊時,通常會見到對我們的帳號、密碼、郵箱等格式或復雜程度進行限制,而這一切都是正則表達式的功勞,而正則表達式在不同的環境中也是具有不同的作用的。
??? 在正則表達式中我們一般是將這些組成正則表達式的字符稱作“元字符”。
??? 在Linux下,正則表達式:
??? ^PATTERN 行首錨定符,以PATTERN為行首開始
??? PATTERN$ 行尾錨定符,以PATTERN為行尾結束
??? \<PATTERN 詞首錨定符,以PATTERN為詞首開始的單詞
??? PATTERN\> 詞尾錨定符,以PATTERN為詞尾結束的單詞
??? . 匹配任意單個非空字符
??? * 匹配此前的字符0到任意次
??? .* 匹配此前長度的任意字符(當正則表達式中包含能接受重復的限定符時,通
常的行為是【在使整個表達式能得到匹配的前提下】匹配盡可能多的字符,我們將其稱之為:貪婪模式)
??? ? 匹配此前的字符0次或1次
??? \{m,n\} 匹配之前字符至少m次至少n次(注:匹配至少2次多則不限\{2,\} 匹配最多5次少則不限\{0,5\} 匹配5次\{5\})
??? [] 匹配指定范圍內的任意單個字符
??? [^] 匹配指定范圍外的任意單個字符
??? \(\) 標識引用和分組,做引用時,在后面要使用括號中的字符時只需輸入\n,
n標識次表達式中的從左至右的第幾個括號;做分組作用時,是指括號中的為一組,執行共同的動作
??? 而在Linux中我們通常使用的文本查找工具grep、egrep、fgrep都是配合正則表達式來使用的:
??? grep:基本正則表達式;
??? egrep:擴展正則表達式;
??? fgrep:快速搜索全部的字符。
??? grep [option] file
??? ???? --color=auto|always 指定匹配到的字符所顯示的顏色
??? ???? -E??? 支持擴展正則表達式即:grep -E = egrep
??? ???? -v 取反
??? ???? -i 忽略大小寫
??? ???? -r 搜索多個文件,即:遞歸搜索
??? ???? -B NUMBER 顯示搜索到的行的上NUMBER行
??? ???? -A NUMBER 顯示搜索到的行的下NUMBER行
??? ???? -C NUMBER 顯示搜索到的行的上下NUMBER行
??? ???? -o 只顯示匹配到的內容本身,并非所在的行
??? egrep 擴展正則表達式:擴展正則表達式對標準正則表達式的某些元字符進行了簡化如:
??? \{m,n\} ---->? {m,n}
??? \(\) ----> ()
??? 添加了:
??? | 表示或的意思
??? + 匹配之前字符1次或任意次
例子:
1、搜索以redhat為行開始的行在/etc/passwd中??? #grep --color=auto "^redhat"
/etc/passwd
2、搜索以 :為行結尾的行在/etc/passwd中??? ??? #grep --color=auto ":$"
/etc/passwd
3、搜索不是以字母r開頭的單詞在/etc/passwd中??? #grep --color=auto -v -o
"\<r" /etc/passwd
4、搜索以字母d結尾的單詞在/etc/passwd中??? ??? #grep --color=auto "d\>"
/etc/passwd
5、搜索形如XXX.XXX.XXX.XXX的行,X只為數字在/tmp/test/a.txt中??? #grep --
color=auto "\([[:digit:]]\{3\}\.\)\{3\}[[:digit:]]\{3\}" /tmp/test/a.txt
6、搜索以其為附加組多于兩個用戶的組??? ??? #grep --color=auto "\(,.*\)\{2\}$" /etc/group
7、搜索密碼永不過期的用戶??? ??? ??? #grep --color=auto "\(.*\)\{4\}99999" /etc/shadow
相信你看過后,對正則表達式和grep已經能夠熟練使用了!
?
轉載于:https://blog.51cto.com/grass51/774305
總結
以上是生活随笔為你收集整理的正则表达式||grep的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pdf嵌入字体(不用adobe pdf打
- 下一篇: java中reject方法作用_Java