Linux文本處理工具之grep
阿新 • • 發佈:2019-05-16
目錄 分組 lin col block grep 指定 格式 需要 文本處理三劍客之GREP
文本過濾工具:glob 用於實現bash中的文件名通配
- 通配符:
*:任意長度的任意字符
?:任意單個字符
[ ]:明確指明匹配範圍內的單個字符- [abc]:abc中的任意一個
- 註:要匹配通配符本身,需要使用%轉義
- 常用的字符集合表示法:
- [:alpha:]:任意字母
- [:alnum:]:任意數字和字母
- [:blank:]:任意空白字符
- [:cntrl:]:任意控制字符
- [:digit:]:任意數字
- [:lower:]:任意小寫字母
- [:upper:]:任意大寫字母
- [:space:]:任意空格
例如:顯示/var目錄下,以l開頭,以小寫字母結尾,且中間至少出現一位數字的文件或目錄
- ls -d /var/l[[:digit:]][[:lower:]]
grep:全局搜索正則表達式並顯示出來(文本過濾工具)
grep:基本正則表達式
egrep:擴展正則表達式
作用:文本搜索,根據用戶指定的內容,對目標文件進行逐行匹配檢查,打印匹配到的行
- 內容(模式):由正則表達式字符和文本符所編寫的過濾條件
- 正則表達式:由一類特殊字符所編寫的模式,有些字符不表示字符本身的含義,而表示控制或通配
- 元字符:表示特殊含義的字符
grep的使用方法:
- 格式:grep [選項] 模式 目錄或文件
- --color=auth:對匹配到的內容加顏色顯示
- -m #:匹配#次後停止
- -n:顯示匹配的行行數
- -c:統計匹配到的行的行號
- -v:顯示不能匹配到的行
- -i:匹配時忽略字符大小寫
- -o:僅顯示匹配到的字符
- -q:靜默模式
- -A#:顯示匹配到的行和後#行
- -B#:顯示匹配到的行和前#行
- -C#:顯示匹配到的行和前後各#行
- -w:匹配整個單詞
- -E:使用擴展正則表達式
- -F:使用fgrep
- -f file:根據模式文件中的內容去匹配
基本正則表達式的元字符:使用引號引起來
- 字符匹配:
.:任意單個字符
[]:匹配指定範圍內的任意單個字符
[^]:匹配指定範圍之外的任意單個字符 - 次數匹配:
:匹配前面的字符任意次數
.:匹配任意長度的任意字符
\?:匹配前面的字符0次或1次,即前面的字符可有可無
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符m到n次
\{m,\}:匹配前面的字符至少出現m次
\{,m\}:匹配前面的字符至多出現m次 - 位置錨定:
^:匹配的字符出現在行首
$:匹配的字符出現在行尾
^pattern$:用於整行匹配
^$:空行
^[[:space:]]$:空白行
\<或\b:詞首錨定,用於單詞模式左側
\>或\b:詞尾錨定,用於單詞模式的右側
\<pattern\>:匹配整個單詞 - 分組:
\(\):把括號中的內容分組
\(xy\)*ab:匹配ab前面的xy出現任意次數 - 後向引用:引用前面分組括號中的模式所匹配到的內容
- 分組括號中的模式所匹配到的內容,會被正則表達式引擎記錄在內部變量中,這些變量被命名為\1,\2,\3……
- -n:把左側起第n個左括號以及與之匹配的右括號之間的模式所匹配到的字符
- 例:(str1+(str2)*)
\1:str1+(str2)*
\2:str2
- 分組括號中的模式所匹配到的內容,會被正則表達式引擎記錄在內部變量中,這些變量被命名為\1,\2,\3……
- 或者:
\|:
- 實例:
a\|b:a或者b
C\|cat:C或者cat
\(C\|c\)at:Cat或者cat
擴展正則表達式:egrep
選項與基本正則表達式相同
egrp的元字符:
- 字符匹配:同grep
- 次數匹配:同grep,但是不需要轉義
- 位置錨定:同grep
- 分組:小括號不需要轉義
- 後向引用
- 或者:| 不需要轉義
fgrep:不支持正則表達式,僅僅找給定的字符串
練習:
- 顯示/proc/meminfo文件中以大小寫s開頭的行
grep -i ‘^s.‘ /proc/meminfo
grep ‘[Ss].‘ /proc/meminfo - 顯示/etc/passwd文件中不以bash結尾的行
grep -v ‘.*bash$‘ /etc/passwd
- 顯示CentOS7中的/etc/grub2.cfg文件中,至少以一個空白字符開頭,且後面有非空白字符的行
grep -E "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
Linux文本處理工具之grep