linux中grep命令的用法

原文鏈接:https://www.cnblogs.com/flyor/p/6411140.html

linux中grep命令的用法

linux中grep命令的用法

作爲linux中最爲常用的三大文本(awk,sed,grep)處理工具之一,掌握好其用法是很有必要的。

首先談一下grep命令的常用格式爲:grep [選項] ”模式“ [文件]

grep家族總共有三個:grep,egrep,fgrep。

常用選項:

-E :開啓擴展(Extend)的正則表達式。

-i :忽略大小寫(ignore case)。

-v :反過來(invert),只打印沒有匹配的,而匹配的反而不打印。

-n :顯示行號

-w :被匹配的文本只能是單詞,而不能是單詞中的某一部分,如文本中有liker,而我搜尋的只是like,就可以使用-w選項來避免匹配liker

-c :顯示總共有多少行被匹配到了,而不是顯示被匹配到的內容,注意如果同時使用-cv選項是顯示有多少行沒有被匹配到。

-o :只顯示被模式匹配到的字符串。

–color :將匹配到的內容以顏色高亮顯示。

-A n:顯示匹配到的字符串所在的行及其後n行,after

-B n:顯示匹配到的字符串所在的行及其前n行,before

-C n:顯示匹配到的字符串所在的行及其前後各n行,context

img

img

模式部分:

1、直接輸入要匹配的字符串,這個可以用fgrep(fast grep)代替來提高查找速度,比如我要匹配一下hello.c文件中printf的個數:fgrep -c “printf” hello.c

2、使用基本正則表達式,下面談關於基本正則表達式的使用:

匹配字符:

. :任意一個字符。

[abc] :表示匹配一個字符,這個字符必須是abc中的一個。

[a-zA-Z] :表示匹配一個字符,這個字符必須是a-z或A-Z這52個字母中的一個。

[^123] :匹配一個字符,這個字符是除了1、2、3以外的所有字符。

對於一些常用的字符集,系統做了定義:

[A-Za-z] 等價於 [[:alpha:]]

[0-9] 等價於 [[:digit:]]

[A-Za-z0-9] 等價於 [[:alnum:]]

tab,space 等空白字符 [[:space:]]

[A-Z] 等價於 [[:upper:]]

[a-z] 等價於 [[:lower:]]

標點符號 [[:punct:]]

img

匹配次數:

{m,n} :匹配其前面出現的字符至少m次,至多n次。
      ? :匹配其前面出現的內容0次或1次,等價於{0,1}。

  • :匹配其前面出現的內容任意次,等價於{0,},所以 “.*” 表述任意字符任意次,即無論什麼內容全部匹配。

img

位置錨定:

^ :錨定行首

$ :錨定行尾。技巧:"^$"用於匹配空白行。

\b或<:錨定單詞的詞首。如"\blike"不會匹配alike,但是會匹配liker

\b或>:錨定單詞的詞尾。如"\blike\b"不會匹配alike和liker,只會匹配like

\B :與\b作用相反。

img

img

分組及引用:

(string) :將string作爲一個整體方便後面引用

\1 :引用第1個左括號及其對應的右括號所匹配的內容。

\2 :引用第2個左括號及其對應的右括號所匹配的內容。

\n :引用第n個左括號及其對應的右括號所匹配的內容。

img

3、擴展的(Extend)正則表達式(注意要使用擴展的正則表達式要加-E選項,或者直接使用egrep):

匹配字符:這部分和基本正則表達式一樣

匹配次數

  • :和基本正則表達式一樣

? :基本正則表達式是?,二這裏沒有\。

{m,n} :相比基本正則表達式也是沒有了\。

  • :匹配其前面的字符至少一次,相當於{1,}。

位置錨定:和基本正則表達式一樣。

分組及引用

(string) :相比基本正則表達式也是沒有了\。

\1 :引用部分和基本正則表達式一樣。

\n :引用部分和基本正則表達式一樣。

或者

a|b :匹配a或b,注意a是指 | 的左邊的整體,b也同理。比如 C|cat 表示的是 C或cat,而不是Cat或cat,如果要表示Cat或cat,則應該寫爲 (C|c)at 。記住(string)除了用於引用還用於分組。

注1:默認情況下,正則表達式的匹配工作在貪婪模式下,也就是說它會儘可能長地去匹配,比如某一行有字符串 abacb,如果搜索內容爲 “a.*b” 那麼會直接匹配 abacb這個串,而不會只匹配ab或acb。

注2:所有的正則字符,如 [ 、* 、( 等,若要搜索 * ,而不是想把 * 解釋爲重複先前字符任意次,可以使用 * 來轉義。

下面用一個練習來結束本次grep的學習:

在網絡配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33 中檢索出所有的 IP

1、檢索出 0-255的範圍

img

2、由0-255的數字組合成IP

img

3、簡化

img

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章