如何保证grep至少返回一行

时间:2013-10-07 05:47:23

标签: grep default

我想运行一个运行grep命令并输出结果的脚本。我希望grep返回一行,但是想要处理没有匹配行的情况(例如,如果grepped文件不存在)。有没有办法执行像

这样的事情
line = grep ...
if line is empty
   print "\n"
else
   print line

2 个答案:

答案 0 :(得分:3)

您需要做的就是检查grep的返回码。

如果一条线匹配,则

grep返回0,如果没有匹配线,则返回1。如果发生错误,它将返回大于1的值。

$ echo "hi" | grep hi
hi
$ echo $?
0
$ echo "hi" | grep hello
$ echo $?
1

答案 1 :(得分:1)

在某些情况下(例如在bash脚本中有set -e时),您不希望grep以状态1退出,这是表达式提供给{{ 1}}不匹配。

因此,要防止将退出状态1 (或更高)提供回调用grep的终端或脚本,请使用:

grep

可能的结果:

  1. “EXPR”在FILE.txt中匹配 - 输出匹配列表
  2. “EXPR”在FILE.txt中不匹配 - 输出:“找不到匹配项”
  3. grep或文件未找到的参数不正确(退出状态2及更高版本) - 输出(STDOUT):“找不到匹配项”(以及STDERR消息)