grep命令搜索文本

grep可以设置搜索结果的颜色,查看环境变量发现已经做了设置:alias grep='grep --color=auto',最好不要再修改

跳过二进制文件

执行grep命令时,出现匹配到二进制文件,说明grep 的字符串在一个不开源的二进制文件源码中有用到,一般可以跳过,在命令最后加--binary-files=without-match,最好加入上面的alias里面

搜索以</set为行首的结果,跳过二进制文件:

1
grep -r  '^</set'  .  -n  --binary-files=without-match

搜索包含完整单词setup的结果,跳过二进制文件:

1
grep -r  '\<setup\>'  . -n  --binary-files=without-match

这样不会显示包含setups的结果

从结果中排除某字符串

grep用于从检索结果中获取含有某字符串的结果,但是如果想要的结果是排除某字符串的,可以使用grep -v string。最典型的应用就是:ps aux | grep process | grep -v grep,用于查看进程process,去掉grep本身的进程

获得apriltag_ros_continuous进程的个数
ps -ef | grep apriltag_ros_continuous | grep -v grep | wc -l

grep命令搜索多个字符串

1
grep 'fatal\|error\|critical'  test.log

需要注意的是,如果要搜索的字符串包含空格,需要用双引号将其括起来

正则表达式

常用正则表达式的格式符:

1
2
3
4
5
6
7
8
9
^: 行首锚定
$: 行尾锚定
^PATTERN$: 用于PATTERN来匹配整行

\<: 词首锚定
\>: 词尾锚定
\<PATTERN\>: 匹配完整单词
. (小数点):代表『一定有一个任意字节』的意思;
* (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态

常用的是词首和词尾锚定,

1
2
grep -n 'g..d' file.txt    # g 与 d 之间一定要存在两个字节
grep -n '\<good\>' file.txt # 找出完整的good

指定文件类型

--include可以指定搜索的文件类型,例如:

1
grep -r "网络" . -n --include "*.sh"

搜索时只搜索sh文件中的文本

排除文件类型

--exclude可以排除文件类型,例如:

1
grep -r "网络" . -n --exclude "*.bak"

搜索时排除bak文件类型

另一种方式

查找内容含有abc的文件: grep "abc" *

搜索 ——

-符号比较特殊,这样是错误的,不会有结果

1
2
grep "-----" test.cc    # 无论加不加 -rn
grep -e "-----" .

正确的

1
2
grep -e "-----" test.cc
grep -- "-----" *.cc

参考:
grep命令的使用 && 正则表达式