我正在努力让这两者一起工作:
grep
如果找到,则退出并显示错误代码 1 。- 显示整个输出或匹配的行。
现在我有第一个,如果 grep 匹配,它会以 1 退出。但是我怎样才能显示一些反馈呢stdout
?
如果找到则命令失败:grep -vz hello
预期行为:
(带有all
in 的 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" )