linux文字處理三劍客之grep

2021-08-02 17:02:00 字數 3288 閱讀 3092

grep:英文縮寫global search regular expression and print out the line(全面搜尋正規表示式並把行列印出來),是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來。

正規表示式是對字串操作的一種邏輯公式,用事先定義好的一組特殊字元,組成乙個「規則字元集合」,根據使用者指定的文字模式對目標檔案進行逐行搜尋匹配,顯示能被模式匹配到的結果。

給定乙個正規表示式和另乙個目標字串,我們可以從給定的字串中通過匹配模型,過濾字串中不想要的的字串,得到目標字串,減少工作量。

gun/linux下grep包括 grep、egrep和 fgrep

- egrep是grep的擴充套件,等同grep -e

- fgrep就是fixed grep或fast grep,等同grep -f不使用任何正規表示式,直接進行字串匹配

常用的正規表示式一般為基本正規表示式grep和擴充套件正規表示式egrep。

擴充套件正規表示式與基礎正規表示式的唯一區別在於:? + () {} 這幾個字元。

基礎正規表示式中,如果你想? + () {}表示特殊含義,你需要將他們轉義,

而擴充套件正規表示式中,如果你想? + () {} 不表示特殊含義,你需要將他們轉義。

如下例子:

[echo@localhost]$ echo aaaa | grep  'a?'

[echo@localhost]$ echo aaaa | grep '\a?'

aaaa

[echo@localhost]$ echo aaaa | grep -e 'a?'

aaaa

[echo@localhost]$ echo aaaa | egrep ' a?'

aaaa

grep [option] pattern [file]…

-o:只顯示被模式匹配到的內容

-i:ignore case,不區分字元大小寫

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

-w:匹配乙個完整的單詞

-v:沒有匹配到的行

-n:列印出匹配字串的在檔案中的行號

--color:對匹配的字串著色列印

-5:匹配字元及前後各5行

-a 5:匹配字元及後5行,同-c 5

-b 5:匹配字元及前5行

grep -oin 'root' /etc/passwd   #顯示行號,不區分大小寫只匹配到字元本身
.:匹配任意單個字元

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

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

[0-9]:匹配陣列 0-9 的任意乙個

[0-z]:匹配任一數字及小寫字母

[0-z]:匹配任一數字及大小寫字母

[[:digit:]]:匹配任意單個數字

[[:lower:]]:匹配任意單個小寫字母,等同[a-z]

[[:upper:]]:匹配任意單個大寫字母,等同[a-z]

[[:space:]]:匹配任意單個空白字元

[[:punct:]]:匹配任意單個標點符號

[[:alpha:]]:匹配任意單個英文本母

[[:alnum:]]:匹配任意單個字母或數

grep  [^0-9[:lower:]]  /etc/passwd      # 匹配除數字和小寫字母以外的字元
*: 匹配前面的字元任意次

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

\?:匹配前面的字元 0 次或者 1 次

\+: 匹配前面的字元 1 次或多次

\:匹配前面的字元 m 次

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

\:匹配前面的字元至少 m 次

\:匹配前面的字元至多 n 次

grep "[0-9]\+.*[[:punct:]]\" /etc/passwd    # 至少乙個數字及3個以上標點符號
^:錨定行首

$:錨定行尾

\<\b:錨定詞首

\>\b:錨定詞尾

grep -n "^[[:space:]]\+$" mydata.txt                  # 找出空白行的行號

grep "^#[[:space:]]\[^[:space:]]" /etc/inittab # 以#開頭,且後面跟乙個或多個空白字元,而後又跟了任意非空白字元的行

grep '^\([0-9]\).*\1$' /etc/inittab # 乙個數字開頭並以乙個與開頭數字相同的數字結尾的行

以使用括號\(***\)將一組字元括起來,表示這一組字元被當作乙個整體,還可以使用 \1, \2… 對前面括號匹配所匹配的字串進行引用

# 首個單詞和最後乙個單詞一樣的行 grep "^\(\ # 匹配包含mysql或apache或redis的行,`|`表示或 egrep "mysql|apache|redis" mydata.txt # 匹配ipv4的位址 egrep "(\ # 取出預設shell為bash,且其使用者id號最小的使用者的使用者名稱 grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1

Linux文字處理三劍客

grep 作用 文字搜尋工具,根據使用者指定的 模式對目標檔案逐步進行匹配檢查,列印匹配到的行 grep root etc passwd grep命令選項 grep user etc passwd v 顯示不被pattern 匹配的行 e 僅顯示匹配到的字串 grep user etc passwd...

linux文字處理三劍客

常用引數 v 顯示不能夠被匹配到的行 i 忽略大小寫字元 o 僅顯示匹配到的字串 q 靜默模式,不輸出任何資訊 a 後 行 b 前 行 c 前後各 行 e 使用ere,相當於egrep常用引數 n 只列印模式匹配的行 e 直接在命令列模式上進行sed動作編輯,此為預設選項 f 將sed的動作寫在乙個...

文字處理三劍客

文字處理三劍客 劍客一 grep 作用 行 過濾 用法 grep 正規表示式 檔案 路徑 grep e 擴充套件類正規表示式 檔案 路徑 劍客二 sed 用法 sed 選項 位址定位sed命令 檔案 路徑 sed 選項 正規表示式 sed命令 檔案 路徑 sed 選項 位址定位 正規表示式 sed命...