sed:同じ行内で特定の文字列に達すると、パターン置換の繰り返しを停止します。

sed:同じ行内で特定の文字列に達すると、パターン置換の繰り返しを停止します。

この質問に対する答えはどこにもありません。簡単に見えますが、おそらくそうではないかもしれないと思い始めました。

sedがこの文字列からSTOPの前にすべてのCATを削除するようにしたいと思います。

two CAT two four CAT CAT seven one STOP four CAT two CAT three

したがって、私が望む結果は次のとおりです。

two two four seven one STOP four CAT CAT two CAT three

文字列のどの場所にもCATがあります。停止マークはどこにあっても構いませんが、次のいずれかを使用でき、常にSTOPとしてマークされます。

(編集:以下に指摘したように、私の質問は不明です。CATには隣接する空白がなければなりませんか、それとも境界でどんな文字でも持つことができますか?英数字以外の文字しかありませんか?です。 大きな bash 関数) 単純化しすぎているので、以下の解決策は隣接関係について別の仮定を行うことができることを読者に覚えておいてください。ありがとうございます)

ベストアンサー1

CAT以前のsがなくなるまで、ループ内で一度に1つずつ置き換えることができますSTOP

$ echo 'two CAT two four CAT CAT seven one STOP four CAT two CAT three' |
    sed -e :a -e '/CAT.*STOP/s/CAT //;ta'
two two four seven one STOP four CAT two CAT three

おすすめ記事