私が持っているとしましょうfile
:
cat
dog
bird
私が実行すると、cat file | grep dog -B 1
次のようになります。
cat
dog
私が実行すると、cat file | grep dog -v
次のようになります。
cat
bird
cat file | grep dog -v -B 1
戻りたいのですが、フラグがないかbird
のように動作します。grep dog
なぜこのフラグを一緒に使用できないのですか?
grep(GNU grep)2.16、2.25でもテスト済み、同じ結果
答え1
私はその逆を得るために私の解決策を追加したいと思いますgrep dog -B 1
。
cat file | grep "$(cat file | grep dog -B 1)" -v
bird
生成されたものと反対の結果を返しますcat file | grep dog -B 1
。
私の初期の問題は、それがどのように機能するかについての誤解だったようです。私はアプリが-v
すべてのコマンドを元に戻すと思いますgrep
。
実際には、-v
フラグが最初に実行された後に-B 1
適用されるように見えるので、dog
含まれていない行をすべて返し、その行より前のすべての行を返します。つまり、すべての行を意味します。
編集:このソリューションが間違っていることを知っています。サブシェルを使用する2番目のgrepは、それを"$(cat file | grep dog -B 1)"
単一のテキストブロックとして扱わないため、反転されません。代わりに、生成された各行は異なるgrepとして扱われます。
サブシェルに次のものが含まれている場合:
cat
dog
元のファイルには、cat
このソリューションを使用して削除される前に1つの場所になかった追加のインスタンスが含まれていました。dog