次のファイルがあります。
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}'
区切られたブロックは空で正常に動作します。