grep 正則表達式
阿新 • • 發佈:2019-03-25
space 遞歸 字符串 uniq 進制 cab 引用 pat digi
grep 可以對文件內容過濾,默認情況是對行過濾;
grep語法格式:# grep <pattern> <arg>
實例:grep root passwd
grep 選項
-m 匹配條件後停止; # grep -m1`whoami` /etc/passwd
-i 忽略條件字符大小寫
-v 顯示不能被條件匹配的字符; # grep -v root /etc/passwd;不包含root的行
-n 顯示匹配的行號
-c 統計匹配的行數
-o 僅顯示匹配到的字符串
-q 靜默模式,不輸出任何信息 ,結果不一樣 echo $?
-A 匹配後N行
-B 匹配前N行
-C 匹配前後N行
-e 多個選項的邏輯or關系;# grep -e ‘cat‘ -e ‘dog‘ file
-w 匹配整個單詞
-E 匹配支持ERE
-F 相當於fgrep,不支持正則表達式
-f 根據文件內容作為標準輸入顧慮
# grep -f file.txt /etc/passwd,根據 file.txt的內容,匹配 passwd
正則表達式分類:基本正則表達式(BRE)和擴展的正則表達式 (ERE)
字符匹配:
匹配特定類型字符
. 匹配任意單個字符
[] 匹配指定範圍內的任意單個字符
[^] 匹配任意範圍以外的任意單個字符;
[:lower:]任意小寫字母
[:upper:]任意大寫字母
[:alpha:]任意大小寫的字母
[:alnum:]字母和數字(大小寫和數字)
[:digit:]任意十進制數字
匹配次數
* :匹配前面的字符任意次數,包括0次;盡可能的匹配;
.* :匹配任意長度的任意字符
\? :匹配器前面的字符0或1次,對前面字符可有,可無;
\+ :匹配其前面的字符至少1次;
\{n\}:匹配前面的字符n次
\{m,n\}:匹配前面的字符至少每次,最多n次;
\{,n\}:匹配前面的字符最多n次;
\{n,\}:匹配前面的字符最少n次;
位置錨定--定位出現的位置
^ 行首錨定;以什麽開頭
$ 行尾錨定:以什麽結尾
^pattern$:用於模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b :詞首錨定,用於單詞模式的左側;
\> 或 \b :詞尾錨定,用於單詞模式的右側;
分組\{\} : 將一個或多個字符捆綁在一起,當做一個整體處理,如\(root\)\+
\1 表示從左側起第一個左括號以及與之匹配右括號之間的模式 所匹配到的字符;
實例:echo abcabcabc |grep "\(abc\)\{3\}"
後向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身;
echo abcabcabc xyz xyz |grep "\(abc\).*\(xyz).*\1"
\1匹配的是前面的一個結果
或 :\| -- 實例 a 或 b==a\|b
egrep及擴展的正則表達式
egrep = grep -E
字符匹配
. 任意單個字符;
[] 指定範圍的字符;
[^] 不在指定範圍的字符;
次數匹配
* 匹配前面字符任意次數
? 可有可無0或1次
+ 1次或多次
{m} 匹配m次
{m,n}至少m數,最多n數;
位置錨定
^ 行首
$ 行尾
\< 詞首or \b
\> 詞尾 or \b
分組 ()
後向引用 \1,\2
或 a|b
實例
1、搜索某文件是否包含字符串
命令格式:grep "被查找的字符串" Filename1
2、在多個文件中檢索某個字符串
命令格式:
grep "被查找的字符串" FileName1...
3、顯示檢索內容在文件中的行 “-n“ 選項
命令格式: grep -n "被查找的字符串" *.log
4、檢索時需要忽略大小寫問題,可以使用參數 “-i”
命令格式: grep -i "被查找的字符串" *.log
5、從文件內容查找不匹配指定字符串的行
命令格式:grep –v "被查找的字符串" FileName
搜索查找匹配的行數:
grep –c "被查找的字符串" FileName
grep "被查找的字符串" FileName | wc -l
7、遞歸搜索某個目錄以及子目錄下的所有文件
命令格式:grep –r "被查找的字符串" FileDir
8、獲取哪些文件包含搜索的內容,並列出文件名
命令格式:grep -H –r "被查找的字符串" FileDir | cut -d: -f1| [uniq]
9、獲取與整個搜索字符匹配的內容
命令格式:grep –w "被查找的字符串" FileName
grep 正則表達式