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

Chi*_*jay 43 grep bash ubuntu

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

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*ouf 68

grep如果找到至少一个模式实例,则返回成功,否则返回失败。因此,else如果您想要同时打印“does”和“does not”,您可以添加一个子句,或者您可以否定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
Run Code Online (Sandbox Code Playgroud)


Noa*_*nos 9

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

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


ssa*_*nch 6

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

grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
    echo "User does not exist!!"
Run Code Online (Sandbox Code Playgroud)

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

  • 这实际上只是[Eric 所说的](https://unix.stackexchange.com/a/223504/117549) 的一种更长的表达方式。 (2认同)
  • 好吧,对我来说是否定的“如果!” grep ...`声明不起作用。所以这是一个替代方案。 (2认同)

小智 6

grep -q query_text ./file.txt && echo true || echo false
Run Code Online (Sandbox Code Playgroud)