grep命令详解(如何匹配多个字符串)(grep指令)(grep -q)
文章目录
-
- 20221011 grep如何匹配多个标志?
- 20230412 grep -q(`Use grep -q instead of comparing output with [ -n .. ].`警告)
参考文章:grep命令详解
| grep -c [被搜索文本] # 统计被搜索文本出现的次数
参考文章:Linux中用grep命令来搜索单词及统计匹配的行数
20221011 grep如何匹配多个标志?
参考文章:Linux shell:grep命令查找多个字符串(grep同时匹配多个关键字或任意关键字)
[命令] | grep '[pattern1]\\|[pattern2]'
注意\\|
跟前后pattern要连着
如,在我们的英伟达盒子上:
root@nx-desktop:/home/ubuntu# ls -l
total 52
drwxr-xr-x 5 ubuntu ubuntu 4096 9月 29 14:59 Desktop
drwxr-xr-x 2 ubuntu ubuntu 4096 12月 24 2020 Documents
drwxr-xr-x 2 ubuntu ubuntu 4096 9月 27 16:19 Downloads
-rw-r--r-- 1 ubuntu ubuntu 8980 12月 24 2020 examples.desktop
drwxr-xr-x 2 ubuntu ubuntu 4096 12月 24 2020 Music
drwxr-xr-x 2 ubuntu ubuntu 4096 12月 24 2020 Pictures
drwxrwxr-x 3 ubuntu ubuntu 4096 10月 10 11:40 projects
drwxr-xr-x 2 ubuntu ubuntu 4096 12月 24 2020 Public
drwxr-xr-x 2 ubuntu ubuntu 4096 12月 24 2020 Templates
drwxr-xr-x 2 ubuntu ubuntu 4096 12月 24 2020 Videos
drwxrwxr-x 8 ubuntu ubuntu 4096 12月 24 2020 VisionWorks-SFM-0.90-Samples
root@nx-desktop:/home/ubuntu#
root@nx-desktop:/home/ubuntu# ls -l | grep 'op\\|ic'
drwxr-xr-x 5 ubuntu ubuntu 4096 9月 29 14:59 Desktop
-rw-r--r-- 1 ubuntu ubuntu 8980 12月 24 2020 examples.desktop
drwxr-xr-x 2 ubuntu ubuntu 4096 12月 24 2020 Music
drwxr-xr-x 2 ubuntu ubuntu 4096 12月 24 2020 Pictures
drwxr-xr-x 2 ubuntu ubuntu 4096 12月 24 2020 Public
root@nx-desktop:/home/ubuntu#
root@nx-desktop:/home/ubuntu#
在海康摄像头里:
ls
bin dev heop lib proc sys var
dav etc home linuxrc sbin usr
# # ls -l | grep 'b\\|e'
ls -l | grep 'b\\|e'
drwxrwxr-x 2 1006 1008 1260 Sep 27 09:58 bin
drwxrwxrwt 15 0 0 5180 Sep 27 09:58 dev
drwxr-xr-x 2 0 0 100 Oct 9 17:30 etc
drwxr-xr-t 3 0 0 60 Oct 9 17:30 heop
drwxr-xr-t 6 0 0 120 Oct 9 17:30 home
drwxr-xr-x 4 0 0 4060 Sep 27 09:58 lib
lrwxrwxrwx 1 0 0 11 Sep 27 09:58 linuxrc -> bin/busybox
drwxrwxr-x 2 1006 1008 180 Sep 27 09:58 sbin
drwxrwxr-x 6 1006 1008 120 Sep 27 09:58 usr
#
20230412 grep -q(Use grep -q instead of comparing output with [ -n .. ].
警告)
示例:
if ! docker images | awk '{print $1":"$2}' | grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$"; then# do something if the image does not exist
else# do something if the image exists
fi
grep -q是grep命令的一个选项,它的作用是在查找匹配项时不输出任何内容,只返回一个退出状态码。如果找到匹配项,则返回0,否则返回1。
在if语句中,我们可以使用grep -q来检查某个条件是否成立,而不必在标准输出中显示任何内容。这样可以提高脚本的效率和可读性。
在我们之前的例子中,grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$"
用于检查docker images的输出是否包含IMAGE_NAME和IMAGE_TAG的组合。如果存在,则if语句返回true,否则返回false。由于我们只关心是否存在匹配项,而不关心具体的匹配内容,因此使用grep -q可以避免不必要的输出和处理。
注意:if ! docker images | awk '{print $1":"$2}' | grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$";
不要改成if ! $(docker images | awk '{print $1":"$2}' | grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$");
因为在if语句中,我们只需要检查命令的退出状态码,而不需要将其输出作为if语句的条件。因此,可以直接使用if ! docker images | awk '{print $1":"$2}' | grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$"
来检查镜像是否不存在。
这个细节来源于一个shellcheck的警告:SC2143 – ShellCheck Use grep -q instead of comparing output with [ -n … ].