Linux 三剑客之 grep

grep 是 Linux 中用于文本搜索的强大工具,可以在文件中搜索指定的模式,并输出包含该模式的行。以下是 grep 命令的所有选项及其功能的详细说明,并附带示例和注释:

基本使用

grep [OPTION]... PATTERN [FILE]...
  • PATTERN:要匹配的模式。默认是基本正则表达式(BRE)。

正则表达式选择和解释

  • -E, --extended-regexp:将 PATTERN 视为扩展正则表达式(ERE),允许使用更复杂的正则表达式语法,如 +?

    grep -E "pattern[0-9]+" filename
    # 查找包含模式 'pattern' 后跟一个或多个数字的行
    
  • -F, --fixed-strings:将 PATTERN 视为固定字符串,不作为正则表达式处理。

    grep -F "fixed_string" filename
    # 查找包含固定字符串 'fixed_string' 的行,而不进行正则匹配
    
  • -G, --basic-regexp:将 PATTERN 视为基本正则表达式(BRE)。这是 grep 的默认模式。

    grep -G "pattern" filename
    # 使用基本正则表达式模式进行匹配(默认模式)
    
  • -P, --perl-regexp:将 PATTERN 视为 Perl 兼容正则表达式(PCRE),支持 Perl 风格的正则表达式。

    grep -P "\d{2,4}" filename
    # 查找包含2到4个数字的行(Perl 风格正则表达式)
    
  • -e, --regexp=PATTERN:指定用于匹配的模式。

    grep -e "pattern" filename
    # 查找包含指定模式 'pattern' 的行
    
  • -f, --file=FILE:从文件 FILE 中读取模式。每行一个模式。

    grep -f patterns.txt filename
    # 从 patterns.txt 中读取模式,并在 filename 中查找匹配
    
  • -i, --ignore-case:忽略大小写。

    grep -i "pattern" filename
    # 查找包含 'pattern'(忽略大小写)的行
    
  • -w, --word-regexp:强制模式只匹配完整的单词。

    grep -w "word" filename
    # 查找包含完整单词 'word' 的行
    
  • -x, --line-regexp:强制模式匹配整行。

    grep -x "exact line" filename
    # 查找完全匹配 'exact line' 的整行
    
  • -z, --null-data:数据行以 0 字节而不是换行符结束。

    grep -z "pattern" filename
    # 处理以 0 字节结束的行(通常用于处理二进制数据)
    

杂项

  • -s, --no-messages:抑制错误信息。

    grep -s "pattern" filename
    # 如果文件不存在或发生错误,不显示错误信息
    
  • -v, --invert-match:选择不匹配的行。

    grep -v "pattern" filename
    # 查找不包含 'pattern' 的行
    
  • -V, --version:显示版本信息并退出。

    grep -V
    # 显示 grep 的版本信息
    
  • --help:显示帮助文本并退出。

    grep --help
    # 显示 grep 的帮助信息
    

输出控制

  • -m, --max-count=NUM:在匹配到 NUM 次后停止。

    grep -m 3 "pattern" filename
    # 只显示前 3 次匹配的行
    
  • -b, --byte-offset:打印输出行的字节偏移量。

    grep -b "pattern" filename
    # 在每行匹配项前显示字节偏移量
    
  • -n, --line-number:打印行号。

    grep -n "pattern" filename
    # 显示匹配行的行号
    
  • --line-buffered:每行输出时刷新输出缓冲区。

    grep --line-buffered "pattern" filename
    # 实时输出匹配结果,每行刷新缓冲区
    
  • -H, --with-filename:对每个匹配项打印文件名。

    grep -H "pattern" filename
    # 显示匹配行所在的文件名
    
  • -h, --no-filename:抑制文件名前缀(当搜索多个文件时)。

    grep -h "pattern" file1 file2
    # 显示匹配行,不显示文件名
    
  • --label=LABEL:使用 LABEL 作为标准输入文件名前缀。

    grep --label="myfile" "pattern" filename
    # 将标准输入文件名标记为 'myfile'
    
  • -o, --only-matching:仅显示匹配的部分。

    grep -o "pattern" filename
    # 只显示匹配到的模式部分,而不是整行
    
  • -q, --quiet, --silent:抑制所有正常输出。

    grep -q "pattern" filename
    # 仅返回退出状态,抑制正常输出
    
  • --binary-files=TYPE:假设二进制文件的类型;TYPE 为 ‘binary’, ‘text’, 或 ‘without-match’。

    grep --binary-files=text "pattern" filename
    # 将二进制文件视为文本文件进行处理
    
  • -a, --text:等同于 --binary-files=text

    grep -a "pattern" filename
    # 处理二进制文件时,将其视为文本
    
  • -I:等同于 --binary-files=without-match

    grep -I "pattern" filename
    # 在处理二进制文件时忽略匹配
    
  • -d, --directories=ACTION:处理目录的方式;ACTION 为 ‘read’, ‘recurse’, 或 ‘skip’。

    grep -d recurse "pattern" directory/
    # 递归处理目录中的文件
    
  • -D, --devices=ACTION:处理设备、FIFO 和套接字的方式;ACTION 为 ‘read’ 或 ‘skip’。

    grep -D read "pattern" filename
    # 读取设备、FIFO 和套接字的内容
    
  • -r, --recursive:类似于 --directories=recurse

    grep -r "pattern" directory/
    # 递归地查找目录中的文件
    
  • -R, --dereference-recursive:类似于 -r,但会跟踪所有符号链接。

    grep -R "pattern" directory/
    # 递归查找,包括跟踪符号链接
    
  • --include=FILE_PATTERN:只搜索匹配 FILE_PATTERN 的文件。

    grep -r --include="*.txt" "pattern" directory/
    # 仅在 .txt 文件中搜索模式
    
  • --exclude=FILE_PATTERN:跳过匹配 FILE_PATTERN 的文件和目录。

    grep -r --exclude="*.log" "pattern" directory/
    # 跳过 .log 文件的搜索
    
  • --exclude-from=FILE:跳过与 FILE 中的任何文件模式匹配的文件。

    grep -r --exclude-from="exclude.txt" "pattern" directory/
    # 跳过 exclude.txt 中指定模式的文件
    
  • --exclude-dir=PATTERN:跳过匹配 PATTERN 的目录。

    grep -r --exclude-dir="tmp" "pattern" directory/
    # 跳过 tmp 目录中的文件
    
  • -L, --files-without-match:仅打印没有匹配项的文件名。

    grep -L "pattern" filename1 filename2
    # 显示不包含 'pattern' 的文件名
    
  • -l, --files-with-matches:仅打印包含匹配项

的文件名。

grep -l "pattern" filename1 filename2
# 显示包含 'pattern' 的文件名
  • -c, --count:仅打印每个文件中匹配行的计数。

    grep -c "pattern" filename
    # 显示每个文件中匹配 'pattern' 的行数
    
  • -T, --initial-tab:使制表符对齐(如果需要)。

    grep -T "pattern" filename
    # 如果输出中包含制表符,则对齐制表符
    
  • -Z, --null:在文件名后打印 0 字节。

    grep -Z "pattern" filename
    # 在输出的每个文件名后加上 0 字节,通常用于处理二进制数据
    

上下文控制

  • -B, --before-context=NUM:打印 NUM 行的前导上下文。

    grep -B 3 "pattern" filename
    # 显示匹配行及其前 3 行
    
  • -A, --after-context=NUM:打印 NUM 行的尾随上下文。

    grep -A 3 "pattern" filename
    # 显示匹配行及其后 3 行
    
  • -C, --context=NUM:打印 NUM 行的前后上下文(前导和尾随)。

    grep -C 3 "pattern" filename
    # 显示匹配行及其前后各 3 行
    
  • -NUM:等同于 --context=NUM

    grep -5 "pattern" filename
    # 显示匹配行及其前后各 5 行
    
  • --group-separator=SEP:使用 SEP 作为组分隔符。

    grep -C 3 --group-separator="--" "pattern" filename
    # 在匹配结果之间使用 '--' 作为分隔符
    
  • --no-group-separator:使用空字符串作为组分隔符。

    grep -C 3 --no-group-separator "pattern" filename
    # 在匹配结果之间不使用任何分隔符
    
  • --color[=WHEN], --colour[=WHEN]:使用标记突出显示匹配字符串;WHEN 为 ‘always’, ‘never’, 或 ‘auto’。

    grep --color=always "pattern" filename
    # 总是使用颜色标记匹配的字符串
    
  • -U, --binary:在行尾不去除 CR 字符(MSDOS/Windows)。

    grep -U "pattern" filename
    # 处理 CR 字符(回车符)
    
  • -u, --unix-byte-offsets:报告偏移量时不考虑 CR 字符(MSDOS/Windows)。

    grep -u "pattern" filename
    # 偏移量计算不考虑 CR 字符
    

egrepfgrep

  • egrep:等同于 grep -E,用于扩展正则表达式。

    egrep "pattern" filename
    
  • fgrep:等同于 grep -F,用于固定字符串匹配。

    fgrep "pattern" filename
    

egrepfgrep 的直接调用已经被弃用,建议使用 grep -Egrep -F

文件和标准输入

  • FILE- 时,grep 从标准输入读取数据。

    echo "data" | grep "pattern"
    
  • 如果没有指定 FILEgrep 将读取当前目录(.),或在给定 -r 选项时,读取 -

    grep "pattern"
    

退出状态

  • 0:如果至少选择了一行。
  • 1:没有选择任何行。
  • 2:发生错误(例如语法错误),且未给出 -q 选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值