2つのパターン間の文字列をsedして削除します。

2つのパターン間の文字列をsedして削除します。

sedを使用して2つのパターン間の文字列の一部を削除するのに問題があります。私は常に最後のPATTERN-2をソートします。

テスト.txt:

PATTERN-1xxxxPATTERN-2aaa
PATTERN-1xxxxPATTERN-2fffPATTERN-1zzzzPATTERN-2gggPATTERN-1zzzzPATTERN-2
PATTERN-1xxxxPATTERN-2bbb

ガイドライン

sed 's/PATTERN-1.*PATTERN-2//g' test.txt

上記の結果は

aaa

bbb

しかし、私は欲しい

aaa
fffggg
bbb

PATTERN-1に最も近いPATTERN-2を見つけることができますか?

ベストアンサー1

@steeldriverが指摘したように、貪欲ではない正規表現があれば簡単です。そうでない場合は、次のようにループを使用して実行できます。

sed ':a;s/PATTERN-2/\n/;s/PATTERN-1.*\n//;ta' test.txt

これは、行の途中に改行文字がないことがわかっているために機能します。これは、どの行にも表示されない他の文字(たとえば)にも当てはまります§

おすすめ記事