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 | grep -n 'g..d' file.txt # g 与 d 之间一定要存在两个字节 |
指定文件类型
--include
可以指定搜索的文件类型,例如:1
grep -r "网络" . -n --include "*.sh"
搜索时只搜索sh文件中的文本
排除文件类型
--exclude
可以排除文件类型,例如:1
grep -r "网络" . -n --exclude "*.bak"
搜索时排除bak文件类型
另一种方式
查找内容含有abc
的文件: grep "abc" *
搜索 ——
-
符号比较特殊,这样是错误的,不会有结果1
2grep "-----" test.cc # 无论加不加 -rn
grep -e "-----" .
正确的1
2grep -e "-----" test.cc
grep -- "-----" *.cc