shell 文字處理之 grep

2022-04-29 16:27:09 字數 3414 閱讀 6752

過濾來自乙個檔案或標準輸入匹配模式內容。

除了grep外,還有egrep、fgrep。egrep是grep的擴充套件,相當於grep -e。fgrep相當於grep -f,用的少。

usage: grep [option]... pattern [file]...

支援的正則

描述-e,--extended-regexp 模式是擴充套件正規表示式(ere)

-f,--fixed-strings 模式是換行分隔固定字串

-g,--basic-regexp 模式是基本正規表示式(bre)

-p,--perl-regexp 模式是perl正規表示式

-e,--regexp=pattern 使用模式匹配,可指定多個模式匹配

-f,--file=file 從檔案每一行獲取模式

-i,--ignore-case

忽略大小寫

-w,--word-regexp 模式匹配整個單詞

-x,--line-regexp 模式匹配整行

-v,--invert-match 列印不匹配的行

輸出控制

描述-m,--max-count=num 輸出匹配的結果num數

-n,--line-number 列印行號

-h,--with-filename 列印每個匹配的檔名

-h,--no-filename 不輸出檔名

-o,--only-matching 只列印匹配的內容

-q,--quiet 不輸出正常資訊

-s, --no-messages 不輸出錯誤資訊

-r,--recursive

--include=file_pattern

--exclude=file_pattern

--exclude-from=file

--exclude-dir=pattern

遞迴目錄。

只搜尋匹配的檔案。

跳過匹配的檔案。

跳過匹配的檔案,來自檔案模式。

跳過匹配的目錄

-c,--count 只列印每個檔案匹配的行數

內容行控制

描述-b,--before-context=num 列印匹配的前幾行

-a,--after-context=num 列印匹配的後幾行

-c,--context=num 列印匹配的前後幾行

--color[=when], 匹配的字型顏色

qq群:

323779636(shell/python運維開發群)

示例:1

) 輸出b檔案中在a檔案相同的行

# grep -f a b

2) 輸出b檔案中在a檔案不同的行

# grep -v -f a b

3) 匹配多個模式

# echo

"a bc de

" |xargs -n1 |grep -e '

a' -e 'bc'

abc4) 去除空格http.conf檔案空行或開頭#號的行

5) 匹配開頭不分大小寫的單詞

# echo

"a a b c

" |xargs -n1 |grep -i a

或# echo

"a a b c

" |xargs -n1 |grep '

[aa]'a

a6) 只顯示匹配的字串

# echo

"this is a test

" |grep -o 'is'

isis

7) 輸出匹配的前五個結果

# seq

120 |grep -m 5 -e '

[0-9]'10

1112

1314

8)統計匹配多少行

# seq

120 |grep -c -e '

[0-9]'11

9) 匹配b字元開頭的行

# echo

"a bc de

" |xargs -n1 |grep '^b'

bc10

) 匹配de字元結尾的行並輸出匹配的行

# echo

"a ab abc abcd abcde

" |xargs -n1 |grep -n '

de$'

5:abcde

11) 遞迴搜尋/etc目錄下包含ip的conf字尾檔案

# grep -r '

192.167.1.1

' /etc --include *.conf

12) 排除搜尋bak字尾的檔案

# grep -r '

192.167.1.1

' /opt --exclude *.bak

13) 排除來自file中的檔案

# grep -r '

192.167.1.1

' /opt --exclude-from

file

14) 匹配41或42的數字

# seq

4145 |grep -e '

4[12]'41

4215

) 匹配至少2個字元

# seq

13 |grep -e '

[0-9]'10

1112

1316

) 匹配至少2個字元的單詞,最多3個字元的單詞

# echo

"a ab abc abcd abcde

" |xargs -n1 |grep -e -w -o '

[a-z]'ab

abc17

) 匹配所有ip

# ifconfig |grep -e -o "

[0-9]\.[0-9]\.[0-9]\.[0-9]"18

) 列印匹配結果及後3行

# seq

110 |grep 5 -a 356

7819) 列印匹配結果及前3行

# seq

110 |grep 5 -b 323

4520) 列印匹配結果及前後3行

# seq

110 |grep 5 -c 323

4567

821) 不顯示輸出

不顯示錯誤輸出:

# grep 'a

'abc

grep: abc: no such file or directory

# grep -s 'a'

abc# echo $?

2不顯示正常輸出:

# grep -q 'a'

a.txt

grep支援上一章的基礎和擴充套件正規表示式字元。

shell文字處理

最於檔案的操作以前都是用高階程式語言來操作的。今天恰好需要將乙個目錄中的檔案資訊儲存到sqlite3資料庫中 我用linux中的工具和shell來作為自己畢業設計做原型開發 下面記錄一下這裡用到的部分知識,以作備忘。用ls命令來說明 1.關於shell中的管道和重定向問題。這個知識基礎,這裡不再說了...

shell 文字處理

最近優化指令碼,將幾套指令碼合併,比如,處理nand手機的指令碼和處理emmc手機的指令碼是不一樣的,這導致我們的指令碼有很多個版本。手機側只有busybox,所以不能使用功能強大的python來處理文字。花了半天時間,發現雖然語法比較怪異,但也能簡潔的完成任務。if e proc emmc the...

shell中文字處理命令 grep命令

4.正規表示式和grep結合的例子 引數說明 c只輸出匹配行的數量 i搜尋時忽略大小寫 h查詢多檔案時不顯示檔名 l只列出符合匹配的檔名,而不列出具體的匹配行 n列出所有的匹配行並顯示行號 s不顯示不存在或無匹配文字的錯誤資訊 v顯示不包含匹配文字的所有行 w匹配整詞 x匹配整行 r遞迴搜尋,不僅搜...