跳转至

grep命令,文本搜索

最后更新:2021-07-31

grep(global search regular expression\(RE\) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

grep [options]

选项

[options]主要参数:

  • -a 不要忽略二进制数据。
  • -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
  • -b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
  • -c 计算符合范本样式的列数。
  • -C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
  • -d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
  • -e<范本样式> 指定字符串作为查找文件内容的范本样式。 --E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
  • -f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
  • -F 将范本样式视为固定字符串的列表。
  • -G 将范本样式视为普通的表示法来使用。
  • -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
  • -H 在显示符合范本样式的那一列之前,标示该列的文件名称。
  • -i 胡列字符大小写的差别。
  • -l 列出文件内容符合指定的范本样式的文件名称。
  • -L 列出文件内容不符合指定的范本样式的文件名称。
  • -n 在显示符合范本样式的那一列之前,标示出该列的编号。
  • -q 不显示任何信息。
  • -R/-r 此参数的效果和指定“-d recurse”参数相同。
  • -s 不显示错误信息。
  • -v 反转查找。
  • -w 只显示全字符合的列。
  • -x 只显示全列符合的列。
  • -y 此参数效果跟“-i”相同。
  • -o 只输出文件中匹配到的部分。

pattern正则表达式主要参数:

  • \: 忽略正则表达式中特殊字符的原有含义。
  • ^:匹配正则表达式的开始行。
  • $: 匹配正则表达式的结束行。
  • \<:从匹配正则表达 式的行开始。
  • \>:到匹配正则表达式的行结束。
  • [ ]:单个字符,如[A]即A符合要求 。
  • [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
  • .:所有的单个字符。
  • *:所有字符,长度可以为0。

grep命令常见简单用法

1. 查看进程信息

Text Only
ps afx | grep loc    列出ps afx命令执行结果中含有loc字符的结果。

2. 搜索文件中符合条件的字符串(定位问题很有用,提高效率)

Text Only
grep <字符串> <文件名>

找出文件中含有字符串的行。

Text Only
grep -n <字符串> <文件名>

找出文件中含有字符串的行,并且显示行号。

3. 匹配的上下文分别显示[number]行

Text Only
1
2
3
grep -C \[number\] -n <字符串> <文件名>
grep -B \[number\] -n <字符串> <文件名>
grep -A \[number\] -n <字符串> <文件名>

C 匹配文件中的字符串,显示字符串所在行的前后n行, C--current B 匹配文件中的字符串,显示字符串所在行的前面n行, B--before A 匹配文件中的字符串,显示字符串所在行的后面n行, A--after

4. 全字匹配

Text Only
grep -w <字符串> <文件名>  只匹配整个单词,而不是字符串的一部分。

5. 匹配多个字符串

Text Only
grep -n <字符串1> <文件名> |  grep <字符串2> 匹配即满足<字符串1>又满足<字符串2>的行。

6. 其他实例

\(1\)多个文件查询

grep "sort" *.doc #见文件名的匹配

\(2\)行匹配:输出匹配行的计数

grep -c "48" data.doc #输出文档中含有48字符的行数

\(3\)显示匹配行和行数

grep -n "48" data.doc #显示所有匹配48的行和行号

\(4\)显示非匹配的行

grep -vn "48" data.doc #输出所有不包含48的行

\(4\)显示非匹配的行

grep -vn "48" data.doc #输出所有不包含48的行

\(5\)大小写敏感

grep -i "ab" data.doc #输出所有含有ab或Ab的字符串的行