grep + [選項]+「條件」 +文字檔案
作用:根據「條件」為標準檢索文字把符合條件的行顯示出來。
「條件」:由文字字元和正規表示式元字元編寫。
常用選項:
-color=auto:對找到的文字字元著色後高亮顯示,一般在bash中定義grep=』grep –color=auto』,可以用alias命令檢視到。
-i:忽略字元大小寫;
-o:僅顯示匹配到符合條件的文字自身,不顯示行。
-v, –invert-match:反向匹配;
-e:支援擴充套件的正規表示式;
-q, –quiet, –silient:靜默模式,不輸出任何資訊;
-e, –extended-regexp:支援使用擴充套件正規表示式
-f, –fixed-strings:支援使用固定字串,不支援正規表示式,相當於fgrep;
例如:
grep -f "bin" /etc/passwd 可以執行成功,
grep -f ".*bin" /etc/passwd 無法執行成功。
-g, –basic-regexp:支援使用基本正規表示式;
-p, –perl-regexp:支援使用pcre正規表示式;
-e pattern, –regexp=pattern:多模式機制;或的關係
-f file, –file=file:file為每行包含了乙個pattern的文字檔案,即grep script;讀取檔案中的模式
-a num, –after-context=num 將匹配到符合條件的後num行也顯示出來,num指某個數字。
-b num, –before-context=num將匹配到符合條件的前num行也顯示出來,num指某個數字。
-c num, -num, –context=num將匹配到符合條件的前後num行也顯示出來,num指某個數字。
基本正規表示式元字元:
1、字元匹配:
「.」:匹配任意單個字元;
例如:「b..」表示以」b」字元開頭的任意的三個字元,像 「baw」,」bbb」等都符合條件,而「bwer」這樣的不符合條件。
[ ]:匹配範圍內的任意單個字元;
例如:」[ad]b」 表示「ab」或」db」。 「[a-z]」表示a到z的26個英文本母當中的任意小寫字母。 「[a-z]」表示a到z的26個英文本母當中的任意大寫字母。注意:在正規表示式中嚴格區分大小寫,注意與glob通配字元區別。
常用的字元集合:
[:digit:]任意的數字,[:lower:]任意的小寫字母, [:upper:]任意的大寫字母, [:alpha:]任意的字母包括大小寫, [:alnum:]任意的字母和數字, [:space:]任意的空白字元, [:blank:]任意的空白字元或者製表符, [:punct:]任意的標點符號。(補充:可以man 7 glob 找到)
[^]:匹配範圍外的任意單個字元;
例如:[^a-z]=[^[:lower:]] 除了小寫字母外的任意單個字元
2、匹配次數:
用於指定前面字元出現的次數。預設工作與貪婪模式。
「*」:匹配前面的字元出現任意次數(0或1或多次);
例如:grep 「a*b」 表示b之前的a出現任意次」aaaab」,」b」,」ab」都符合條件。
「.*」:任意長度的任意字元。
例如:grep 「a.*b」 表示」a」和」b」之間可以有任意字元也可以沒有字元。
\ +: 前面的字元出現至少一次
例如:grep 「a+b」 表示「b」字元之前的」a」出現的次數》=1。
\?:0或1次 grep」a\?b」表示「b」字元之前的」a」出現的次數為1次或0次。
\ :前面的字元出現m次。 grep」a\ b」表示「b」字元之前的」a」出現的次數為m次。
\ :前面的字元出現[m,n]次為閉區間。 grep」a\ b」表示「b」字元之前的」a」出現的次數為[m,n]次。
\ :前面的字元出現至多n次。grep」a\ b」表示「b」字元之前的」a」出現的次數為[0,n]次。
\ 前面的字元出現至少m次。grep」a\ b」表示「b」字元之前的」a」出現的次數為[m,+∞]次。
3、位置錨定:
用於指定要搜尋的文字出現在目標文字的位置。
^:行首錨定。例如 grep 「^ab」 表示以ab開頭的行
$
:行尾錨定。例如 grep 「ab$
」 表示以ab結尾的行
「^$
」:表示空行。
」^[[:space:]]*$
「:表示空白行。
單詞:由非特殊字元組成的連續的字串。
\《或\b:詞首錨定。例如:grep 「\ < ab」 表示找以ab開頭的單詞所在的行,單詞內含有ab但是ab不是詞首的不匹配。
>或\b:詞尾錨定。例如:grep 「ab>」 表示找以ab結尾的單詞所在的行,單詞內含有ab但是ab不是詞尾的不匹配。
\< 單詞 >:單詞錨定。例如:grep 「\ < ab>」表示找有ab單詞的行。
4、分組引用:
\ ( 條件\ ):把括號內的條件找到的結果當作乙個整體來處理。括號裡的條件找到的結果會自動被當作乙個變數表示,正規表示式中以\1,\2,\3……依次表示。例如:
\ (條件1\ )\ (條件2\ )依次用\1,\2 變數表示。
解釋:grep 「\ (a..b\ ).*\1c」 表示匹配出 「a..b任意字元a..bc」這裡如果前面的a..b找到的字元是acdb那麼後面a..bc中的」..」必須是cd。前後要一致。
支援使用擴充套件的正規表示式
用法與grep類似
擴充套件正規表示式的元字元:
字元匹配:
「.」:任意單個字元
[ ]:範圍內的任意單個字元
[^ ]:範圍外的任意單個字元
匹配次數:與grep比較egrep不需要加轉義符」\「
*:任意次;
?:0次或1次;
+:1次或多次;
:匹配m次;
:至少m次,至多n次;
:[0,n]次
:[m,+∞]次
位置錨定:與grep相同
^:行首
$:行尾
\<, \b:詞首
>, \b:詞尾
分組及引用:與grep用法相同grep裡的 \ ( \ )在egrep裡變為()。
或者: 的整個左側|整個右側
a|b:a或者b
a|bc:表示a或bc
(a|b)c:表示ac或bc
Linux文字處理工具
linux中熟練的使用文字處理工具非常的重要,因為linux在設計的時候是採用一切皆檔案的哲學的,甚至連計算機中的配置也都使用偽檔案系統來表示,要查詢裡面的內容就是對檔案進行操作,所以學會使用檔案處理工具事半功倍。而在一切皆物件的windows中,因為物件封裝了所有的操作,包括顯示標準輸出的結果,使...
Linux 文字處理工具
tail f 執行tail f或tail f命令可以觀察檔案正在變化的內容 即跟蹤檔案的變化內容 檔案產生新內容時螢幕會顯示新增內容。seq n sort r head n 1 sort r命令能隨機排序。diff u file 1 file 2 file diff patch d file 1 f...
文字處理工具
參考 man,info,magedu講義 宣告 以下英文純屬個人翻譯,英文b級,歡迎糾正,以下內容純屬個人理解,並沒有對錯,只是參考,盜版不糾,才能有限,希望不誤人子弟為好。these commands read and write entire files,possibly transformin...