2行のgrepパターンを作成し、それらの1つを削除します。

2行のgrepパターンを作成し、それらの1つを削除します。

次のファイルがあります。

DN: ダナン

cn:新年

cn:新年1


ドメイン名: danian2

cn:新年2


ドメイン名: danian3

cn:新年3

cn:新年4

私が望むのは、「dn:」パターンに対してgrepを実行し、次の2行だけを印刷することです。しかし、grep -A 2 "dn:"を実行すると、結果はファイル内のすべてであるため、次の2行だけを印刷したいと思います。行行が1つ下の行ではありません。

答え1

これはうまくいくかもしれません:

$ awk -v RS="dn: " -v FS="\n" -v ORS="" 'NF>3 {print "dn:",$0}' input.txt

これをdn:レコード区切り文字として定義します。レコードのフィールドは改行で区切られます\n

で始まる行の後に2行がある場合、dn:新しいレコードがで始まる前に3つの「\ n」が発生するdn:ため、レコードに4つのフィールドがあります。したがって、レコード(NF>3)に3つ以上のフィールドがあることを確認してください。この場合、レコード全体を印刷しますが、前に追加する必要がありますdn:

これにより、NF>3レコードに複数の行があるすべてのレコードが検索されます。正確に2つだけを希望する場合に変更してくださいNF==3

ブロックが空の行で区切られている場合(後のコメントのいずれかでわかるように)、代わりに次を使用します。

$ awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" 'NF>2 {print $0}' input.txt

答え2

上記のコマンドを実行しましたが、うまくいきました。

awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" 'NF>2 {print $0}' 

区切られたブロックは空で正常に動作します。

関連情報