【SHELL】grep 命令用法

壹点灵异發表於2024-10-21

linux 命令列查詢 grep 用法資訊

grep --help
Usage: grep [OPTION]... PATTERNS [FILE]...
Search for PATTERNS in each FILE.
Example: grep -i 'hello world' menu.h main.c
PATTERNS can contain multiple patterns separated by newlines.

Pattern selection and interpretation:
  -E, --extended-regexp     PATTERNS are extended regular expressions
  -F, --fixed-strings       PATTERNS are strings
  -G, --basic-regexp        PATTERNS are basic regular expressions
  -P, --perl-regexp         PATTERNS are Perl regular expressions
  -e, --regexp=PATTERNS     use PATTERNS for matching
  -f, --file=FILE           take PATTERNS from FILE
  -i, --ignore-case         ignore case distinctions in patterns and data
      --no-ignore-case      do not ignore case distinctions (default)
  -w, --word-regexp         match only whole words
  -x, --line-regexp         match only whole lines
  -z, --null-data           a data line ends in 0 byte, not newline

Miscellaneous:
  -s, --no-messages         suppress error messages
  -v, --invert-match        select non-matching lines
  -V, --version             display version information and exit
      --help                display this help text and exit

Output control:
  -m, --max-count=NUM       stop after NUM selected lines
  -b, --byte-offset         print the byte offset with output lines
  -n, --line-number         print line number with output lines
      --line-buffered       flush output on every line
  -H, --with-filename       print file name with output lines
  -h, --no-filename         suppress the file name prefix on output
      --label=LABEL         use LABEL as the standard input file name prefix
  -o, --only-matching       show only nonempty parts of lines that match
  -q, --quiet, --silent     suppress all normal output
      --binary-files=TYPE   assume that binary files are TYPE;
                            TYPE is 'binary', 'text', or 'without-match'
  -a, --text                equivalent to --binary-files=text
  -I                        equivalent to --binary-files=without-match
  -d, --directories=ACTION  how to handle directories;
                            ACTION is 'read', 'recurse', or 'skip'
  -D, --devices=ACTION      how to handle devices, FIFOs and sockets;
                            ACTION is 'read' or 'skip'
  -r, --recursive           like --directories=recurse
  -R, --dereference-recursive  likewise, but follow all symlinks
      --include=GLOB        search only files that match GLOB (a file pattern)
      --exclude=GLOB        skip files that match GLOB
      --exclude-from=FILE   skip files that match any file pattern from FILE
      --exclude-dir=GLOB    skip directories that match GLOB
  -L, --files-without-match  print only names of FILEs with no selected lines
  -l, --files-with-matches  print only names of FILEs with selected lines
  -c, --count               print only a count of selected lines per FILE
  -T, --initial-tab         make tabs line up (if needed)
  -Z, --null                print 0 byte after FILE name

Context control:
  -B, --before-context=NUM  print NUM lines of leading context
  -A, --after-context=NUM   print NUM lines of trailing context
  -C, --context=NUM         print NUM lines of output context
  -NUM                      same as --context=NUM
      --color[=WHEN],
      --colour[=WHEN]       use markers to highlight the matching strings;
                            WHEN is 'always', 'never', or 'auto'
  -U, --binary              do not strip CR characters at EOL (MSDOS/Windows)

這些選項定義了 grep 使用哪種模式來匹配文字:

  • -E, --extended-regexp:啟用擴充套件正規表示式(ERE),支援更多複雜的正則語法,例如 +, ?, {} 等。

    示例

    grep -E 'file(s)?' file.txt

    匹配 filefiles

  • -F, --fixed-strings:將模式視為普通字串,而非正規表示式。這種方式忽略特殊字元的含義。

    示例

    grep -F '[+] error' file.txt

    直接匹配包含 [+] error 字串的行,不將 [] 視為正規表示式的字符集。

  • -G, --basic-regexp:使用基本正規表示式(BRE),這是預設的行為。

    示例

    grep 'file[0-9]' file.txt

    匹配 file 後面跟一個數字的行。

  • -P, --perl-regexp:使用 Perl 風格的正規表示式語法,這允許更加複雜的正規表示式模式。

    示例

    grep -P '\d+' file.txt

    匹配包含一個或多個數字的行,-P 允許使用 \d(數字)這樣的 Perl 正規表示式語法。

  • -e, --regexp=PATTERNS:指定用於匹配的模式(可以使用多次來指定多個模式)。

    示例

    grep -e 'error' -e 'warning' file.txt

    匹配包含 errorwarning 的行。

  • -f, --file=FILE:從檔案中讀取模式,每一行作為一個模式。

    示例

    grep -f patterns.txt file.txt

    patterns.txt 檔案中的每一行都是一個模式,grep 會逐一進行匹配。

  • -i, --ignore-case:忽略大小寫的區別。

    示例

    grep -i 'error' file.txt

    匹配 error, Error, ERROR 等形式。

  • -w, --word-regexp:只匹配完整的單詞,而不是部分匹配。

    示例

    grep -w 'is' file.txt

    只匹配 is 作為獨立單詞的行,而不匹配 thishis

  • -x, --line-regexp:只匹配整個行。

    示例

    grep -x 'hello' file.txt

    只匹配完全是 hello 的行,而不會匹配包含 hello 的其他行。

輸出控制

這些選項控制 grep 的輸出行為:

  • -n, --line-number:列印匹配行的行號。

    示例

    grep -n 'error' file.txt

    輸出包含 error 的行及其行號。

  • -c, --count:只列印匹配的行數。

    示例

    grep -c 'error' file.txt

    輸出檔案中包含 error 的行數。

  • -o, --only-matching:只顯示匹配的部分,而不是整行。

    示例

    grep -o 'error' file.txt

    只顯示 error 出現的次數和位置。

  • -H, --with-filename:在輸出行前顯示檔名(用於多個檔案時)。

    示例

    grep -H 'error' *.txt

    匹配多個檔案,輸出格式為 檔名:內容

  • -h, --no-filename:當搜尋多個檔案時,抑制檔名輸出。

    示例

    grep -h 'error' *.txt

    只顯示匹配的行,不顯示檔名。

  • -l, --files-with-matches:只輸出包含匹配行的檔名。

    示例

    grep -l 'error' *.txt

    只輸出包含 error 的檔名。

上下文控制

這些選項允許顯示匹配行前後的一些額外內容,幫助理解上下文:

  • -A NUM, --after-context=NUM:在匹配行後顯示 NUM 行。

    示例

    grep -A 3 'error' file.txt

    輸出匹配 error 的行及其後 3 行。

  • -B NUM, --before-context=NUM:在匹配行前顯示 NUM 行。

    示例

    grep -B 3 'error' file.txt

    輸出匹配 error 的行及其前 3 行。

  • -C NUM, --context=NUM:在匹配行前後各顯示 NUM 行。

    示例

    grep -C 2 'error' file.txt

    輸出匹配 error 的行及其前後 2 行。

其他常用選項

  • -v, --invert-match:顯示不匹配模式的行(反轉匹配)。

    示例

    grep -v 'error' file.txt

    輸出檔案中不包含 error 的行。

  • -r, --recursive:遞迴搜尋目錄中的檔案。

    示例

    grep -r 'error' /path/to/directory

    遞迴搜尋指定目錄中的所有檔案。

  • --color:高亮顯示匹配到的字串。

    示例

    grep --color 'error' file.txt

    在輸出中高亮顯示匹配的部分。

例子總結

  1. 忽略大小寫匹配 "error",並顯示匹配的行號:

    grep -in 'error' file.txt
  2. 遞迴搜尋包含 "error" 的所有檔案,並只顯示檔名:

    grep -rl 'error' /path/to/directory
  3. 只顯示匹配到的部分,並高亮顯示 "success":

    grep -o --color 'success' file.txt
  4. 搜尋包含 "failed" 的行,並顯示前後 2 行:

    grep -C 2 'failed' file.txt
  5. 顯示不包含 "warning" 的行:

    grep -v 'warning' file.txt

相關文章