この質問を見つけて私の問題の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
この場合、^
両方のモードにアンカーポイントが必要です。