一、grep是什麼。
grep:Global search regular expression and print out the line.
grep是一種文本搜索處理工具,根據用戶指定的文本模式或搜索條件對目標文件進行逐行搜索,並顯示能匹配到的行。
語法格式:grep [options]... 'PATTERN' FILE...
'':弱引用,
"":強引用,如PATTERN中有變量需用雙引號
正則表達式:是一類字符所書寫的模式,其中許多字符不表示其字面意義,而是表達控制或通配等功能
基本正則表達式:grep
擴展正則表達式:egrep,grep -E
不支持使用正則表達式:fgrep,即用戶搜索條件或文本模式表示其字面意義
1、字符匹配
.:匹配任意單個字符 *:任意長度,它前面的字符可以出現任意次 .*:任意長度的任意字符 a|b:多條件匹配,a或者b #擴展正則表達式可用 []:匹配指定範圍內的任意單個字符 [0-9],[[:digit:]] #表示任意數字 [a-z],[[:lower:]] #表示任意小寫字母 [A-Z],[[:upper:]] #表示任意大寫字母 [[:space:]] #表示空格 [[:punct:]] #表示特殊符號 [[:alpha:]] #表示任意字母 [[:alnum:]] #表示任意字母和數字 [[:blank:]] #匹配一個空格或製表符(TAB) [^] #條件取反
2、次數匹配元字符
#"\"符號爲轉義符,擴展正則表達式不需要轉義 \?:0次或1次,它前面的字符是可有可無的 \{m\}:精確匹配m次,它前面的字符要出現m次 #轉義前{m} \{m,n\}:至少m次,至多n次 #轉義前{m,n} \{m,\}:至少m次 #轉義前{m,} +:至少1次 \{0,n\}:至多n次 #轉義前{0,n}
3、位置錨定
^:行首錨定,寫在模式最左側 $:行尾錨定,寫在模式最右側 ^$:空白行 \<:詞首,寫在字符左側 \>:詞尾,寫在字符右側 \<char\>:錨定字符串 \b:字符串錨定,不區分詞首詞尾
4、分組和引用
\(\):分組中的模式匹配到的內容,可由正則表達式引擎記憶在內存中,之後可被引用。擴展正則表達式不需要轉義,直接使用()即可 例如:\(ab\).*\1,即引用前一個括號匹配到的內容 格式:\(char\).*\#,\#表示引用前面第#個括號匹配的內容
5、命令選項
-v:反向選取 -o:僅顯示匹配的字串,而非字串所在的行 -i:igonore-case,忽略字符大小寫 -E:支持使用擴展正則表達式 --color:匹配字串顯示顏色,顏色可指定 -n:顯示匹配行的位置,在第幾行 -A #:顯示上下文,#表示數字,顯示下面#行 -B #:顯示上面#行 -C #:顯示上下#行
6、例子
1)找出/etc/passwd文件中的一位數或兩位數; # grep -E '\<[0-9]{1,2}\>' /etc/passwd 擴展正則 # grep "\<[0-9]\{1,2\}\>" /etc/passwd 基本正則 2)顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; # grep '^[[:space:]]{1,}' /boot/grub/grub.conf # grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf 3)找出/etc/rc.d/init.d/functions文件中某單詞後跟一組小括號“()”行; # grep -o -E "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions 4)顯示當前系統上root、fedora或user1用戶的默認shell; # grep -E "^(root|fedora|user1):" /etc/passwd | cut -d: -f7