grep -A逆一致 - 次のフィールドの不一致のみを印刷します。

grep -A逆一致 - 次のフィールドの不一致のみを印刷します。

「200 OK」を複数回印刷するファイルがあります。私は「COMMAND」モードの後に​​現れる最後の「200 OK」にのみ興味があります。私の特定のファイルでは、「COMMAND」が100回印刷されました。次のようになります。

otherdata
200 OK
otherdata 
200 OK
COMMAND
200 OK

だから命令を使用します。

grep -A1 COMMAND file | grep -v '200 OK' 

これにより、次のような結果が得られます。

COMMAND xxxxx PASSWORD xxxxxx
--
COMMAND xxxxx PASSWORD xxxxxx
513 unknown user account
--
COMMAND xxxxxx PASSWORD xxxxxx
--
COMMAND xxxxxx PASSWORD xxxxxx
513 unknown user account
--
COMMAND xxxxxx PASSWORD xxxxxxx
--

私は200 OKを除くすべてを手に入れましたが、以下を含む行は必要ありません。

COMMAND xxxxx PASSWORD xxxxx
---

200 OK以外の行とその上の行だけを出力するにはどうすればよいですか?理想的には、出力にこのような行だけを含め、他の行を含めないようにしてください。 513は1つの例にすぎず、他の場合もあります。

COMMAND xxxxx PASSWORD xxxxxx
513 user account unknown

ベストアンサー1

あなたはこれを行うことができますsed

sed -n -e '/COMMAND/{N;/200/! p;}' file

デフォルトでは、これは-n1行を印刷しないために使用され、1行が一致する場合はその行をCOMMAND次の行に関連付けます(Nそうでない場合は200結合行を印刷します)。

おすすめ記事