簡介:
grep即(Global search REgular expression and Print out the line)全局的搜索正則表達式并且打印顯示出來。
通俗點講:根據用戶指定的文本模式(搜索條件)對目標文件進行逐行搜索,顯示能匹配到的行。
正則表達式:
正則表達式是一類字符所書寫的模式,其中許多字符不表示其字面意義,而是表達控制或通配等功能;
元字符:不便是其字面意思,而用于額外功能性描述
基本正則表達式的元字符:
字符匹配:
.:匹配任意單個字符
[]:匹配指定范圍內的任意單個字
[0-9],[[:digit:]]:任意單個數字
[a-z],[[:lower:]]:任意單個小寫字母
[A-Z],[[:upper:]]:任意單個大寫字母
[[:space:]]:空白字符
[[:punct:]]:標點符號
[[:alpha:]]:所有大小寫字母
[[:alnum:]]:所有數字字母
[^]:取反
次數匹配:
用于實現指定其前面的字符所能出現的次數
*:任意長度,它前面的字符可以出現任意次
\?:出現0次或者1次,也就是說它前面的字符是可有可無的
\{m\}:m次,它前面的字符要出現m次
\{m,n}:至少m次,至多n次(m<n)
\{m,\}:至少m次
\{0,n\}:至多n次
.*:任意長度的任意字符
位置錨定:
^:行首錨定,寫在模式最左側
$:行尾錨定,寫在模式最右側
^$:空白行
\<:詞首錨定,出現于單詞左側
\>:詞尾錨定,出現于單詞右側
\b:詞首詞尾都可以
(注:不包含特殊字符的連續字符組成的串叫單詞)
分組:
\(\) 例如:\(ab\)*
注:分組中的模式匹配到的內容,可由正則表達式引擎記憶在內存中,之后可被多次引用
引用:
\n:引用第n個括號所匹配到的內容,而非模式本身
擴展正則表達式:
字符匹配:
.:任意單個字符
[]:匹配任意字符范圍內
[^]:匹配任意范圍外
次數匹配:
*:任意次
?:0次或1次
+:至少1次
{m}:精確匹配m次
{m,n}:至少m次,至多n次
{m,}:至少m次
{0,n}:至多n次
錨定
^:行首
$:行尾
\<,\b:詞首
\>,\b:詞尾
^$,^[[:space:]]*$:空行
分組:
()
引用:
\n
或者:
a|b:a或b
grep的用法:
grep [option]… ‘PATTERN' FILE…
grep的命令選項:
-v:去反向選取
-o:僅顯示匹配的字串本身,而非字串所在的行
-i:ignore-case,忽略字符大小寫
-E:支持使用擴展正則表達式
-A:顯示之前兩行
-B:顯示之后兩行
-C:顯示上下兩行
egrep:egrep用法等同于grep -E
實戰操作:
1.顯示/proc/meminfo文件中以大寫或小寫S開頭的行;
2.顯示/etc/passwd文件中其默認shell為非/sbin/nologin的用戶;
3.顯示/etc/passwd文件中其默認shell為/bin/bash的用戶;進一步;僅顯示上述結果中ID號最大的用戶;
4.找出/etc/passwd文件中的一位數或兩位數;
5.顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;
6.找出netstat -tan命令執行結果中以‘LISTEN’結尾的行;
7.找出ifconfig命令結果中1-255之間的數字;
8.顯示當前系統上root或git用戶的默認shell;
9.使用echo命令輸出一個路徑,而后使用grep取其基名
原創文章,作者:水蒸氣,如若轉載,請注明出處:http://www.www58058.com/4148