当文件不包含字符串时如何使用grep

当文件不包含字符串时如何使用grep

在我的 bash 脚本中,如果文件中不存在某个字符串,我会尝试打印一行。

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"

如果我希望该字符串存在于文件中,这就是我的写法,但是如果在 /etc/passwd 文件中找不到用户,我该如何更改它以使其打印“用户不存在”?

答案1

grep如果至少找到该模式的一个实例,则返回成功;如果没有找到,则返回失败。因此,else如果您想要同时打印“是”和“不”,您可以添加一个子句,或者您可以直接否定条件if以仅获得失败。每个的一个例子:

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"
else
    echo "User does not exist!!"
fi

if ! grep -q "$user2" /etc/passwd; then
    echo "User does not exist!!"
fi

答案2

您可以使用grep 选项“-L / --files-without-match”,检查文件是否不包含字符串:

if [[ $(grep -L "$user2" /etc/passwd) ]]; then   
  echo "User does not exist!!"; 
fi

答案3

另一种方法是查找 的退出状态grep。例如:

grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
    echo "User does not exist!!"

如果grep找不到匹配项,它将退出1,因此$?也会退出1。如果成功grep总是会返回。0所以使用起来$? != 0$? == 1.

答案4

我用简单的一行代码解决了它:

for f in *.txt; do grep "tasks:" $f || echo $f; done

该命令将检查目录中具有 txt 扩展名的所有文件,如果找到,则写入搜索字符串(即“任务:”),否则写入文件名。

相关内容