0

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

line = grep ...
if line is empty
   print "\n"
else
   print line
4

2 回答 2

3

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

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

$ echo "hi" | grep hi
hi
$ echo $?
0
$ echo "hi" | grep hello
$ echo $?
1
于 2013-10-07T05:50:41.553 回答
1

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

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

grep "EXPR" FILE.txt || echo "No match found"

可能的结果:

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