06.grep 與正則應(yīng)用

前言:
本文僅限于grep的正則應(yīng)用。
標(biāo)準(zhǔn)正則、擴(kuò)展正則等見文檔 《正則》

1. 簡單應(yīng)用

1.1 語法

grep [選項] “查找內(nèi)容” 文件1 文件2

返回值:
0,找到。1,沒找到。2,找不到指定文件。

1.2 選項

-i :忽略大小寫

-n :在每一行前面加上它在文件中的相對行號

-c :顯示成功匹配的行數(shù)

-s :禁止顯示文件不存在或文件不可讀的錯誤信息

-q :靜默

-v :只顯示不匹配的行

-R,-r :遞歸

--color : 顏色

-o :只顯示匹配的內(nèi)容

-B3 :顯示匹配行和前面3行的內(nèi)容(注意不空格)

-A3 :顯示匹配行和后面3行的內(nèi)容

-C3 :顯示匹配行和前后3行的內(nèi)容

1.3 示例

已有文件及內(nèi)容如下:

# cd /tmp/test
# cat 1.txt
abc
#cat 2.txt
ABC
#cat 3.txt
123
abc
123
#cat a/a1.txt
abc
  • 列出指定目錄下包含abc的文件名
# grep abc /tmp/test/*
/tmp/test/1.txt:abc
/tmp/test/3.txt:abc
grep: /tmp/test/a: 是一個目錄
  • 列出指定目錄及子目錄下包含123的文件名
#  grep -r abc /tmp/test/*
/tmp/test/1.txt:abc
/tmp/test/3.txt:abc
/tmp/test/a/a1.txt:abc
  • 列出abc所在行的序號
# grep -n abc /tmp/test/*
/tmp/test/1.txt:1:abc
/tmp/test/3.txt:2:abc
grep: /tmp/test/a: 是一個目錄
  • 列出passwd中root用戶及后邊3行內(nèi)容
# grep -A3 ^root --color /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

2. 正則應(yīng)用

  • grep支持的元字符

^, $, ., *, [], [^], < >,(),{}

  • 擴(kuò)展元字符

語法:# egrep# grep -E

元字符集: ?, +, { }, |, ( )

注:grep也可以使用擴(kuò)展集中的元字符,僅需要對這些元字符前置一個反斜線

  • 其他

\w 所有字母與數(shù)字

\W 非字符(所有字母與數(shù)字之外的字符) 'love[^a-zA-Z0-9]+' 'love\W+'

\b 詞邊界 '\blove\b' 等同于'<love>'</love>

【示例】列出所有包含數(shù)字和字母的文件名

# grep "\w" /tmp/test/*.txt
/tmp/test/1.txt:abc
/tmp/test/2.txt:ABC
/tmp/test/3.txt:123
/tmp/test/3.txt:abc
/tmp/test/3.txt:123

說明:\w必須加引號

3. 邏輯應(yīng)用

grep 的 and、or、not

3.1 邏輯否(not)

  • 語法
    # grep -v

3.2 邏輯和(and)

  • 兩個層grep
# cat 1.txt |grep AAA | grep BBB
  • 用正則匹配

3.3 邏輯或(or)

3.3.1 利用符號|

不推薦,感覺寫起來比較亂

  • grep直接執(zhí)行
# grep '1\|3' 1.txt

說明:引號必須(單雙沒有區(qū)別)、| 必須有、\必須有

  • grep -E 或 egrep
# grep -E '1|3' 1.txt

說明:和前例區(qū)別就是不用加反斜杠

3.3.2 grep -e

# grep -e 1 -e 3 1.txt

3.3.3 利用數(shù)組

  • 使用數(shù)組

不建議,會被打碎為單個字符

# grep "[ac]" *
1.txt:abc
3.txt:abc
image.png

說明:
[ ] 里的內(nèi)容會被認(rèn)為是一個個分開的字符
里邊的符號也被當(dāng)做字符處理(除 -之外),這一點是和shell數(shù)組的區(qū)別。

  • 連續(xù)區(qū)間
# grep "[a-c]" *
1.txt:abc
3.txt:abc
image.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容