Linux基礎命令之grep詳解

2021-07-22 09:29:48 字數 3061 閱讀 7190

grep (global search regular re) and print out the line,全面搜尋正規表示式並把行列印出來)是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來。unix的grep家族包括g

grep, egrep, fgrep

grep: 預設支援基本正規表示式;

egrep: 擴充套件正規表示式;

fgrep: 不支援正規表示式元字元,搜尋字串的速度快,等同於grep -f

正規表示式是一類字元所書寫的模式(pattern)

元字元:不表示字元本身的意義,而用於額外功能性的描述;

grep [options] 'pattern' file

正規表示式:基本正規表示式,擴充套件正規表示式;

基本正規表示式:貪婪模式(盡可能長地去匹配符合模式的內容)

^:錨定行首的符合條件的內容,用法格式「^pattern」;

$: 錨定行尾的符合條件的內容,用法格式「pattern$」;

.: 匹配任意單個字元

*:匹配緊挨在其前面的字元任意次;

a*b: ab, aab, acb, b

.*: 匹配任意長度的任意字元

:匹配指定範圍內的任意單個字元

[^]:匹配指定範圍外的任意單個字元

\?: 匹配緊挨在其前面的字元0次或1次;

\: 匹配其前面的字元至少m次,至多n次;

\: 至多n次;0-n次;

:至少m次

\: 精確匹配m次;

\<: 錨定詞首,用法格式:\\>: 錨定詞尾,用法格式:pattern\>

\(\): 分組,用法格式: \(pattern\)

grep的選項:

--color=auto 自動為匹配的字元附色

export grep_color='01;36'

-r: 遞迴搜尋用法同 -d recurse(遞迴)

-v: 反向選取,只顯示不符合模式的行;

-o: 只顯示被模式匹配到的字串,而不是整個行;

-i: 不區分字元大小寫;

-a #:顯示匹配到的行時,順帶顯示其後面的#個行;

-b #:前面的#行;

-c #:前後的#行;

-e: 使用擴充套件的正規表示式

grep -e = egrep

grep選項應用例項

[root@localhost ~]#

nano /tmp/grepr 建立檔案,檔案內容下面會顯示;

[root@localhost ~]# cat /tmp/grepr | grep -v "^$" 反向選擇,顯示檔案中的非空白行

nichilema

magezhenxing

nishishui

wolaile

mingtianjian

nihaihaoma

[root@localhost ~]# cat /tmp/grepr | grep --color -i "m" 不區分m的大小寫,只要行中有m/m,都將該行顯示出來

nichilema

magezhenxing

mingtianjian

nihaihaoma

[root@localhost ~]# cat /tmp/grepr | grep --color -o "m"只顯含有m的行m

m m

[root@localhost ~]# cat -n /tmp/grepr | grep -a 1 --color "wolaile" 若行中含有「wolaile」 則顯示該行和它後邊的那一行

4wolaile 5

mingtianjian

[root@localhost ~]#

cat -n /tmp/grepr | grep -b 1 --color "wolaile"若行中含有「wolaile」 則顯示該行和它前邊的那一行

3nishishui 4

wolaile

[root@localhost ~]#

cat -n /tmp/grepr | grep -c 1 --color "wolaile" 若行中含有「wolaile」 則顯示該行和它前後各一行

3nishishui 4

wolaile 5

mingtianjian

grep 正規表示式例項

1,錨定/etc/passwd檔案中行首為root的行

# grep

「^root

」/etc/passwd

2,錨定/etc/passwd檔案行尾為sh的行

# grep

「sh$

」/etc/passwd

3,查詢空白行

# grep 「^$

」/etc/passwd

4,匹配a後面跟了任意單個字元的行

# grep 「a.

」/etc/passwd

5,匹配a後面跟了任意個a的行

# grep 「a*

」/etc/passwd

4,匹配a後面跟了任意長度的任意字元,再跟上b的行

# grep

「a.*b

」/etc/passwd

5,匹配a後面跟了任意個一數字後又跟了任意乙個字母的行

# grep

「a[0-9][a-za-z]

」/etc/passwd

6,匹配a後面跟了任意乙個數字或字母的行

# grep

「a[0-9a-za-z]

」/etc/passwd

7,匹配0或1個a後面跟了個b的行

# grep

「a\?b

」/etc/passwd

8,匹配最少乙個a,最多3個a後面跟了乙個b的行

# grep

「a\b

」/etc/passwd

9,錨定單詞admin的行

# grep 「\

」/etc/passwd

10,匹配自少出現一次ad,最多出現3次ad的行

# grep

「\(ab\)\

」/etc/passwd

rep、egrep和fgrep。

Linux基礎命令之grep

grep 根據pattern 模式 搜尋文字,並將符合模式的文字行顯示出來,並不會修改原檔案。用法 grep options pattern file 也可以利用管道進行匹配 i ignore 忽略大小寫 colour 將匹配的字串加顏色。v 反向查詢,顯示與pattern不匹配的行 o 只顯示被模...

linux基礎命令之選取命令grep

命令作用 分析一行資訊,若當中有我們所需要的資訊,就將該行拿出來。命令語法 grep acinv color auto 查詢字串 filename 引數 a 將binary檔案以text檔案的方式查詢資料 c 計算找到 查詢字串 的次數 i 忽略大小寫的不同,n 順便輸出行號 v 反向選擇,即顯示出...

linux基礎命令grep

目的 使用grep命令來查詢檔案中符合條件的字串 格式 grep 選項 查詢模式 檔名 舉例項看看 建立乙個檔案test1.txt,檔案的內容是 aaaaaaaaa abcabcabcabc cbacbacba match pattern nand erase 首先在查詢字串時,我們希望顯示如下內容...