Shell 如何判别grep有没有匹配到内容

2023-05-27  本文已影响0人  AibWang

grep命令是非常强大的搜索工具,可以匹配常规字符串,也可以使用正则表达式匹配(-e-E选项),可以匹配单个文件,也可以匹配多个文件(使用通配符标识需要进行匹配的文件),可以匹配当前文件夹下的文件,也可以递归匹配目录下的文件(-r选项)。

在某些情况下,我们需要判断grep命令是否成功匹配到内容(也即判断目标文件内是否存在我们要查找的内容)。一般有两种方法可以实现:

  1. 借助上一进程的返回值

  2. 判断匹配结果是否为空字符串

第一种方法通过判断上一进程的返回值(紧接在执行完grep命令之后),成功执行返回0,执行失败返回1。紧接在grep执行之后,判断$?是否为0,可以实现判断是否匹配到查找的内容,示例如下:

# 查找a.txt中是否存在www.字符串
grep "www." a.txt
if [ $? -eq 0 ]
then
   echo "find www."
fi

第二种方法将grep的匹配结果赋值给一个变量,判断变量字符串长度是否为零,可以实现判断grep是否查找到相应的内容。示例如下:

match_str=`grep "www." a.txt`
if [ -n "$match_str" ]
then
  echo "find www."
fi

注意,上述if判断中一定要把匹配结果变量加上双引号,标识为字符串,否则如果match_str为空,脚本会报错。

判断字符串长度是否为零(为空)有两种方式:

-n 字符串长度不为零(True),为零(False)

-z 字符串长度为零(True),不为零(False)

当然,也可以使用逻辑非!表达式将判断结果反转,如判断一个字符串a为零,可以表示为:if [ -z "$a" ]if [ ! -n "$a" ]

补充知识:

# 获得当前进程 ID
$$
# 获得之前(上一个)进程 ID
$!
# 获得之前(上一个)进程结束的状态码 (0 表示成功, 1 表示失败)
$?

参考:

Bash Shell *,@, #, $$,!, ?,- 和 $_ - 知乎 (zhihu.com)

shell中[][[]]的区别

Linux shell 逻辑运算符、逻辑表达式、通配符、元字符、转义符详解shell逻辑运算符寰宇001的博客-CSDN博客

上一篇 下一篇

猜你喜欢

热点阅读