如何抑制grep的输出

the*_*lat 4 bash grep echo

当我运行此命令时,它还会在grep成功时打印文件中的实际$项.我不想打印内容/ $ item.我只想表现出我的回声?
有人可以帮忙吗

if grep $item filename; then
   echo it exist
else
    echo does not exist
fi
Run Code Online (Sandbox Code Playgroud)

谢谢

fed*_*qui 6

用途-q:

if grep -q "$item" filename; then
   echo "it exists"
else
    echo "does not exist"
fi
Run Code Online (Sandbox Code Playgroud)

或者在一个班轮中:

grep -q "$item" filename && echo "it exists" || echo "does not exist"
Run Code Online (Sandbox Code Playgroud)

man grep

-q, - quiet, - silent

安静; 不要写任何标准输出.如果发现任何匹配,则立即退出零状态,即使检测到错误也是如此.另请参阅-s或--no-messages选项.(-q由POSIX指定.)


正如AdrianFrühwirth所指出的那样,grep -q仅凭STDIN就会沉默.如果你想摆脱STDERR,你可以将它重定向到/dev/null:

grep -q foo file 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

  • `grep &> /dev/null` 也能用!如果你的 `grep` 没有 `-q` 或 `-q` 行为很奇怪。 (2认同)
  • +1。这是正确的答案,但应该注意的是,这并不能完全使 `grep` 静音,因为它只影响 `stdout`。根据情况,您可能还想抑制错误消息(例如,如果文件不存在),然后您将需要`grep -q foo file 2>/dev/null`。 (2认同)