grep/egrep工具的使用

grep/egrep 工具的使用

格式:grep [-cinvABC] 'word' filename正則表達式

  • -c:表示打印符合要求的行數

    grep -c 'root' passwd 統計passwd 裏面包含root的行數bash

  • -i:表示忽略大小寫。

    grep -i 'root' passwd 把passwd文件中包含root(字母不區分大小寫) 打印到輸出界面ide

  • -n:表示輸出符合要求的行及其行號

    grep -n 'root' passwd 把passwd文件中包含root的行打印出來,且顯示第幾行工具

  • -v:表示打印不符合要求的行。

    grep -v 'root' passwd 把passwd文件中不包含root 的行打印出來ci

  • -r:遍歷全部子目錄

    grep -r 'root' /etc/ 查找/etc目錄下全部子目錄子文件中包含root的行字符串

  • -A:後面跟一個數字(有無空格均可以),例如-A2表示打印符合要求的行以及下面兩行

    grep -A2 'root' passwd 打印出包含root的行和下面兩行it

  • -B:後面跟一個數字,例如-B2表示打印符合要求的行以及上面兩行

    grep -B2 'root' passwd 打印出包含root的行和上面兩行class

  • -C:後面跟一個數字,例如-C2表示打印符合要求的行以及上下各兩行。

    grep -C2 'root' passwd 打印出包含root的行和上面兩行,下面兩行,總共五行基礎


grep的實用

1,過濾出帶有某個關鍵詞的行,並輸出行號file

[root@jinkai01 grep]# grep -n 'root' passwd
打印出包含 root 的行

2,過濾出不帶有某個關鍵詞的行,並輸出行號

[root@jinkai01 grep]# grep -nv 'root' passwd
打印出不包含 root 的行

3,過濾出全部包含數字的行(只要有一個數字匹配到就算

[root@jinkai01 grep]# grep '[0-9]' passwd
將passwd 中包含 數字0-9的行打印出來

4,過濾出全部不包含數字的行

[root@jinkai01 grep]# grep -v [0-9] inittab
將passwd 中不包含數字 0-9的行打印出來

5,過濾掉全部以#開頭的行 (這裏麪包含了空行)

[root@jinkai01 grep]# grep -v '^#' inittab
將inittab 文件中不是以 #號開頭的行打印出來,空行也算

6,過濾掉全部空行和以#開頭的行

[root@jinkai01 grep]# grep -v '^#' inittab | grep -v '^$'
將inittab文件中不是以#號開頭的行且非空行打印出來
在正則表達式中,^表示行的開始,$表示行的結尾,那麼空行則能夠用^$表示。

7,打印出不以英文字母開頭的行

[root@jinkai01 grep]# grep '^[^a-zA-Z]' a.txt 打印出以非字母開頭的行
123
456
#fdasffd
[root@jinkai01 grep]# grep '[^a-zA-Z]' a.txt 打印出包含非字母的行
123
456
abc134
#fdasffd
A123

8,過濾出任意一個字符和重複字符

[root@jinkai01 grep]# grep 'r.o' passwd
. 表示任意一個字符,r.o表示r 和 o 之間有任意一個字符的,例如 包含roo的就能夠打印出來
root:x:0:0:root:/root:/bin/bash
[root@jinkai01 grep]# grep 'oo*' passwd

  • 表示零個或多個前面的字符,oo 表示一個o爲基礎o能夠是零個或者多個,因此o oo ooo。。。都包含在內
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    *表示零個或多個任意字符,空行也包含在內

9,指定要過濾出的字符出現次數

grep 'o \{2 \}' passwd 篩選出o重複出現兩次
這裏用到了符號{},其內部爲數字,表示前面的字符要重複的次數。須要強調的是,{}左右都須要加上轉義字符\。另外,使用「{ }」還能夠表示一個範圍,具體格式爲{n1,n2},其中n1 < n2,表示重複n1到n2次前面的字符,n2還能夠爲空,這時表示大於等於n1次

10,過濾出一個或多個指定的字符

egrep 'o+' passwd 篩選出包含o 的一個或多個字符
和grep不一樣,這裏egrep使用的是符號+,它表示匹配1個或多個+前面的字符,這個「+」是不支持 被grep直接使用的。包括上面的{},也是能夠直接被egrep使用,而不用加\轉義。示例以下
egrep o{2} passwd = grep 'o{2}' passwd

11,過濾出零個或一個指定的字符

egrep 'o?' passwd
?表明o到1個任意字符

12,過濾出字符串 1 或者字符串 2

egrep 'aa|11|oo' passwd
將passwd 中包含aa或11或oo的行打印出來

13,egrep 中 () 的應用

egrep 'r(oo|at)o' passwd 篩選出 rooo或rato 字符這裏用()表示一個總體,上例中會把包含rooo或者rato的行過濾出來,另外也能夠把()和其餘符號組合在一塊兒,例如(oo)+就表示1個或者多個oo。以下所示:egrep '(oo)+' passwd

相關文章
相關標籤/搜索