https://blog.csdn.net/yhc166188/article/details/89183075
https://www.cnblogs.com/csnd/p/11807932.html
目录
参数说明
- -e与-E的区别
https://blog.csdn.net/weixin_38629422/article/details/91801956
https://blog.csdn.net/dgwxligg/article/details/129189848
-e适用于简单的正则表达式,-E适用于复杂的正则表达式。
多关键词查找
grep -e pattern1 -e pattern2 filename
grep -E 'pattern1|pattern2' filename
-
-o
只输出文件中匹配到的部分 -
-v
是反向查找的意思,比如 grep -v grep 就是查找不含有 grep 字段的行 -
-w
全词匹配 -
判断匹配的是否成功
https://blog.csdn.net/wujiangguizhen/article/details/26992353 -
排除搜索目录
例如,要在当前目录及其子目录中搜索文本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,表示在指定目录下搜索子目录;
0 条评论