
本文共 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 工具的学习与实践对日常工作和学习都非常有帮助。
发表评论
最新留言
关于作者
