Grep:如果找到则抛出并显示输出

Grep:如果找到则抛出并显示输出

我正在努力让这两者一起工作:

  1. grep如果找到,则退出并显示错误代码 1 。
  2. 显示整个输出或匹配的行。

现在我有第一个,如果 grep 匹配,它会以 1 退出。但是我怎样才能显示一些反馈呢stdout

如果找到则命令​​失败:grep -vz hello

预期行为:

(带有allin 的 Makefile)

< Makefile grep -<magic> all

CFLAGS = -Wall -Wextra -Werror
all: $(NAME)
re: fclean all
.PHONY: all clean fclean re

exit 1
< Makefile grep -<magic> nothing

exit 0

谢谢

答案1

听起来你想要这样的东西:

! grep -q -e "$expr" <"$file" || ! cat <"$file"

假设 中 的正则表达式与$expr给出的文件中的任何位置都不匹配$file。在这种情况下,初始grep -q退出状态将以非零退出状态退出,该退出状态将被前面的退出状态否定!以导致最终退出状态为零。 OR 列表的第二部分永远不会执行。不会有任何输出。

另一方面,如果grep -q命令匹配某些内容,则会触发 OR 列表的第二部分,该部分输出文件cat并通过否定 的退出状态为零来将退出状态设置为非零cat

使用德摩根定律重新表述为否定 AND 列表:

! ( grep -q -e "$expr" <"$file" && cat <"$file" )

相关内容