Grep:見つかったら投げて出力を表示

Grep:見つかったら投げて出力を表示

私はこれら2つを一緒に操作しようとしています。

  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リストの2番目の部分は実行されません。出力がありません。

一方、grep -qコマンドが一致する場合は、ORリストの2番目の部分をトリガーしてファイルを出力し、cat終了ステータスを0に無効にして終了ステータスを0以外の値に設定しますcat

DeMorganの法則を使用して否定的なANDリストに再構成されます。

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

おすすめ記事