Linux Shell脚本入门--grep命令详解
发布日期:2025-04-06 05:10:14 浏览次数:10 分类:精选文章

本文共 1772 字,大约阅读时间需要 5 分钟。

grep 简介

grep(全称global search regular expression and print out the line,翻译为“全面搜索正则表达式并打印行”)是一种强大的文本搜索工具,能够使用正则表达式在文本中搜索关键字,并将匹配的行打印出来。

grep家族包括grep、egrep和fgrep。其中,egrep和fgrep的命令与grep的功能有所不同。egrep支持更多正则表达式元字符,fgrep则将所有字母视为字面意思,不再具有特殊含义。而linux中的grep工具通常是GNU版本的,其功能更为强大,支持通过-G、-E、-F等命令行选项模拟egrep和fgrep的功能。


grep 常用用法

筛选文本

grep 可以根据需修改的选项进行筛选,常见选项包括:

  • -a:将二进制文件解释为文本文件,搜索其中的数据。
  • -c:统计匹配项的数量。
  • -i:忽略大小写,视大小写为相同。
  • -n:输出匹配行的编号。
  • -v:输出没有匹配内容的行。
  • --color=auto:将匹配关键字部分加色显示,方便阅读。

例如,筛选含有“root”行的/etc/passwd文件:

grep root /etc/passwd

或者通过管道进行联合筛选:

cat /etc/passwd | grep root

如果希望同时显示匹配行的编号:

grep -n root /etc/passwd

关键字显示与排除

  • 使用 --color=auto 可将关键字部分加色显示,例如:
    grep --color=auto "pattern" file
  • 如果不想每次都手动加上 --color=auto,可以在~/.bashrc中添加 alias:
    alias grep='grep --color=auto'

    然后重新加载配置文件:

    source ~/.bashrc

多条件筛选

想同时排除“root”和“nologin”行的文件:

grep -v root /etc/passwd | grep -v nologin

如果需要搜索包含“eth”关键字的行,并显示最前后的相关信息:

grep -n -A3 -B2 --color=auto 'eth' /var/log/dmesg

递归搜索

默认情况下,grep 只能在当前目录中搜索文件。要递归搜索子目录:

grep -r "关键字" /路径/目录

或者特别指定文件类型:

grep -r "关键字" *.txt /路径/目录

如果希望仅输出匹配的文件名,而不显示具体内容:

grep -l -r "关键字" /路径/目录

grep 与正则表达式

字符类

使用字符类可以限定匹配范围:

  • 想匹配“test”或“taste”中的“t”,可以使用 [t]est

  • 想匹配“oo”但不让“go”前缀开头:

    grep -n '[^g]oo' file
  • 使用反向选择 [^...]:匹配非字母开头的“oo”。

  • 连续字节:

    grep -n "[a-zA-Z0-9]" file  # 匹配字母或数字
  • 如果需要数字:

    grep -n '[0-9]' file

行首与行尾

  • 行首定位:
    grep -n '^the' file
  • 行尾定位:使用小数点表示任意字节,记得转义特殊字符:
    grep -n '\.$' file
  • 空白行:
    grep -n '^$' file

任意字节

  • . 匹配任意单个字节:

    grep -n 'g..d' file
  • * 表示重复0次或更多次:

    grep -n 'oo*' file
  • 如果需要至少三个“o”:

    grep -n 'o{3,}' file

扩展grep(-E 或 --extended-regexp)

  • 支持更多正则表达式元字符。例如:
    egrep -n "NW|EA" testfile
  • 通过转义可以启用扩展功能:
    grep -E "NW\|EA" testfile

不使用正则表达式

fgrep 是一种不使用正则表达式的快速搜索工具,适合固定的文本搜索。例如:

fgrep '*' /etc/profile

如果需要与grep等效:

grep -F '*' /etc/profile

通过以上命令,可以高效地进行文本搜索和筛选。grep 工具的学习与实践对日常工作和学习都非常有帮助。

上一篇:Linux Shell脚本处理JSON字符串
下一篇:Linux Shell编程(19)——测试与分支

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年05月08日 13时45分46秒