https://blog.csdn.net/yhc166188/article/details/89183075
https://www.cnblogs.com/csnd/p/11807932.html

参数说明

-e适用于简单的正则表达式,-E适用于复杂的正则表达式。

多关键词查找

grep -e pattern1 -e pattern2 filename
grep -E 'pattern1|pattern2' filename

例如,要在当前目录及其子目录中搜索文本pattern,但排除名为dir_to_exclude的目录,可以使用以下命令:

grep -r --exclude-dir=dir_to_exclude "pattern" .
如果要排除多个目录,可以这样做:

grep -r --exclude-dir=dir_to_exclude1 --exclude-dir=dir_to_exclude2 "pattern" .
或者使用通配符排除所有以temp开头的目录:

grep -r --exclude-dir=temp* "pattern" .
注意:--exclude-dir只能在使用-r或-R(递归搜索)时使用。

  • 显示匹配行以及其前后的内容

在使用grep时,可以通过-C(--context或--context=NUMBER)、-B(--before-context=NUMBER)、-A(--after-context=NUMBER)和-C(--context=NUMBER)选项来显示匹配行以及其前后的内容。

-C NUMBER或--context=NUMBER:显示匹配行以及其前后的内容,共显示NUMBER行。

-B NUMBER或--before-context=NUMBER:仅显示匹配行之前的NUMBER行。

-A NUMBER或--after-context=NUMBER:仅显示匹配行之后的NUMBER行。

例如,要显示匹配字符串pattern以及其前后各2行的内容,可以使用以下命令:

grep -C 2 'pattern' filename
如果只需要显示匹配行上面的内容:

grep -B 2 'pattern' filename
如果只需要显示匹配行下面的内容:

grep -A 2 'pattern' filename

异常情况

  • 搜索特殊字符

在Linux中使用grep命令时,如果模式字符串中包含特殊字符(比如$),它可能会被解释为一个正则表达式的特殊字符,导致意外的行为。为了在模式中包含$字符,需要对其进行转义。

解决方法是在$前面加上反斜杠\进行转义:

grep '\$' filename
这样grep就会搜索文件中包含$字符的行。如果你在shell中使用这个命令,记得要把\放在引号之外,以便shell能够正确地将其传递给grep。

如果你在脚本中使用这个命令,并且是在双引号中,你需要使用两个反斜杠进行转义:

grep "\\\$" filename
这是因为在shell中,第一次解析会把两个反斜杠传递给脚本引擎,然后脚本引擎会解释第二个反斜杠作为正则表达式的转义字符。

示例

案例一

假如要匹配的文件内容为

1111
2222
3333
is
this
his

要匹配的字符为is

案例二:递归查找字符串

grep -nr load_vm_props system/core
-n,表示在输出结果中显示行号;
-r,表示在指定目录下搜索子目录;

分类: find查找

0 条评论

发表回复

您的电子邮箱地址不会被公开。