grep 正則表達式

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

實例
一、搜索某文件是否包含字符串
命令格式:grep "被查找的字符串" Filename1

二、在多個文件中檢索某個字符串
命令格式:
grep "被查找的字符串" FileName1...

三、顯示檢索內容在文件中的行  「-n「 選項 
命令格式: grep -n "被查找的字符串" *.log 

四、檢索時須要忽略大小寫問題,可使用參數 「-i」
命令格式: grep -i "被查找的字符串" *.log

五、從文件內容查找不匹配指定字符串的行
命令格式:grep –v "被查找的字符串" FileName

搜索查找匹配的行數:

grep –c "被查找的字符串" FileName
grep "被查找的字符串"  FileName | wc -l

七、遞歸搜索某個目錄以及子目錄下的全部文件
命令格式:grep –r "被查找的字符串"  FileDir

八、獲取哪些文件包含搜索的內容,並列出文件名
命令格式:grep -H –r "被查找的字符串"  FileDir  | cut -d: -f1| [uniq]

九、獲取與整個搜索字符匹配的內容
命令格式:grep –w "被查找的字符串" FileName
相關文章
相關標籤/搜索