Linux grep命令詳細教學

2023-04-27 18:01:30

[本文出自天外歸雲的部落格園]

簡介

Linux grep命令是一種非常常用的文字搜尋工具,它可以在給定的檔案中搜尋匹配的字串,並輸出匹配的行。grep是全稱「global search regular expression print」,可以識別正規表示式,並使用正規表示式進行搜尋。

選項

以下是 grep 的所有選項:

grep [options] [pattern] [files]
  • -a, --text: 將二進位制檔案作為文字檔案處理。
  • -c, --count: 顯示匹配行數,而不是行本身。
  • -e pattern, --regexp=pattern: 查詢指定的模式,支援多個模式。
  • -f file, --file=file: 從檔案中讀取模式,每個模式佔一行。
  • -i, --ignore-case: 忽略大小寫。
  • -l, --files-with-matches: 只列印檔名,而不是行本身。
  • -n, --line-number: 在每行的前面列印行號。
  • -r, --recursive: 遍歷子目錄中的檔案。
  • -v, --invert-match: 輸出不匹配的行。
  • -x, --line-regexp: 僅匹配整行。
  • -w, --word-regexp: 僅匹配整個單詞。

pattern 通常是一個正規表示式,用於匹配指定的文字模式。

files 可以是若干個檔案,也可以是目錄。

以上是 grep 命令的所有選項,更多資訊可以使用 man grep 在終端中檢視。

常用grep選項舉例

下面是常用的grep選項及其舉例:

  1. 搜尋指定字串

可以使用grep搜尋包含指定字串的檔案或資料夾,例如:

grep "hello" file.txt
grep "hello" folder/file.txt
  1. 搜尋多個字串

使用-E選項可以在同一行中搜尋多個字串。

grep -E "hello|world" file.txt
  1. 忽略大小寫

使用-i選項可以忽略大小寫的差異。

grep -i "hello" file.txt
  1. 輸出行號

使用-n選項可以輸出匹配字串所在行的行號。

grep -n "hello" file.txt
  1. 反向搜尋

使用-v選項可以輸出不包含指定字串的行。

grep -v "hello" file.txt
  1. 搜尋某個範圍內的行

使用 -A, -B, 或-C選項搜尋特定範圍內的行。

grep -A 2 "hello" file.txt  #輸出包含「hello」的行以及後兩行。
grep -B 2 "hello" file.txt  #輸出包含「hello」的行以及前兩行。
grep -C 2 "hello" file.txt  #輸出包含「hello」的行以及前後兩行。
  1. 搜尋整個單詞

使用-w選項可以搜尋指定單詞作為整個單詞匹配。

grep -w "hello" file.txt
  1. 統計匹配次數

使用-c選項可以統計匹配字串的個數。

grep -c "hello" file.txt
  1. 搜尋指定檔案型別

使用萬用字元可以搜尋特定型別的檔案或使用 --include選項來僅搜尋指定檔案型別。

grep "hello" *.txt
grep "hello" --include "*.txt" folder/
  1. 搜尋子目錄

使用-r或-R選項可以搜尋子目錄的檔案。

grep -r "hello" folder/
grep -R "hello" folder/
  1. 不忽略二進位制檔案

使用-a選項可以強制grep搜尋二進位制檔案。

grep -a "hello" binary_file.bin
  1. 搜尋時忽略特定目錄

使用 --exclude-dir選項來忽略特定目錄的搜尋。

grep -r "hello" folder/ --exclude-dir=log/
  1. 搜尋特定行數

使用 -m 選項指定只搜尋檔案中的前幾行。

grep -m 10 'hello' file.txt # 只搜尋檔案中的前10行
  1. 輸出匹配字串前後的內容

使用 -o 選項僅輸出匹配字串,而 -A 和 -B 選項可以輸出字串前後的內容。

grep -o 'hello' file.txt # 只輸出匹配到的 'hello' 字串,而不包含它前後的內容
grep -A 3 'hello' file.txt # 輸出包含 'hello' 字串的行以及後三行
grep -B 2 'hello' file.txt # 輸出包含 'hello' 字串的行以及前兩行
  1. 顯示不匹配行

使用 -L 選項輸出不匹配指定字串的行。

grep -L 'hello' file.txt # 輸出不匹配 'hello' 字串的行
  1. 顯示匹配行前幾行和後幾行的內容

使用 -C 選項,可以同時輸出匹配字串前後幾行的內容。

grep -C 2 'hello' file.txt # 輸出包含 'hello' 字串的行以及前後兩行內容
  1. 搜尋多個檔案

可以一次性搜尋多個檔案。

grep 'hello' file1.txt file2.txt file3.txt # 搜尋 file1.txt, file2.txt, file3.txt 檔案中的 'hello' 字串
  1. 搜尋時忽略空白字元

使用 -w 選項,可以忽略匹配字串前後的空格、製表符等空白字元。

grep -w 'hello' file.txt # 忽略匹配字串前後的空格、製表符等空白字元
  1. 搜尋時檢視匹配字串的上文或下文

使用 -B 和 -A 選項,可檢視匹配字串上下文的內容。

grep -B 2 'hello' file.txt # 輸出包含 ‘hello’ 字串的行以及匹配字串前2行
grep -A 3 'hello' file.txt # 輸出包含 ‘hello’ 字串的行以及匹配字串後3行

以上就是grep的所有功能舉例。