sed - 行が ^ 条件に一致すると、パターン範囲に一致する行を印刷します。

sed - 行が ^ 条件に一致すると、パターン範囲に一致する行を印刷します。

この質問を見つけて私の問題の99%を解決しましたが、終わりのパターンを^sed - 行が条件に一致すると、パターン範囲に一致する行を印刷します。

これは私のデータであり、行の先頭で閉じる括弧を一致させる必要があります。


(
Device=B
Data=asdfasdf(qwfw)
Lorem=Ipsum
)
(
Device=A
Data=asdfasdf(aewf)
Lorem=Ipsum
)
(
Device=B
Data=asdfasdf(wef)
)
(
Device=A
Data=asdfasdf(jalks)
)
(
Device=B
Data=asdfasdf(asf)
)
(
Device=C
Data=asdfasdf(asfew)
Lorem=Ipsum
)

このコマンドを試していますが、何も一致しません。

sed -n '/(/{:a;N;/^)/!ba;/Device=A/p}' file

削除すると、^以下が返されます。

-> % sed -n '/(/{:a;N;/)/!ba;/Device=A/p}'  test 
(
Device=A
Data=asdfasdf(aewf)
(
Device=A
Data=asdfasdf(jalks)

私がここで何を見逃しているのか知っている人はいますか?

sed バージョン

sed (GNU sed) 4.5
Copyright (C) 2018 Free Software Foundation, Inc.

ベストアンサー1

^ パターンスペースに行を累積すると、次の行の先頭に一致するために使用できなくなりますが、代わりに\n(挿入された改行文字)を使用する必要があります。

sed -n '/(/{:a;N;/\n)/!ba; /Device=A/p}' infile

とても好きですが、コスタスのソリューションそこに(通常、保持バッファを使用する方が簡単で/より良い):

sed 'H;/^(/h;/^)/!d;x;/Device=A/!d' infile

この場合、^両方のモードにアンカーポイントが必要です。

おすすめ記事