最後のインスタンスを除く文字列のすべてのインスタンスを置き換える

最後のインスタンスを除く文字列のすべてのインスタンスを置き換える

次のように構成された文字列があります。

XXthisXXisXXjust\nXXa\nXXtest

XX各文字の前の最後の文字を次のように変更したいと思います。\nYY

$ echo "XXthisXXisXXjust\nXXa\nXXtest"
XXthisXXisXXjust
XXa
XXtest

しなければならない

$ echo "XXthisXXisXXjust\nXXa\nXXtest" | ???
YYthisYYisXXjust
XXa
XXtest

どうすればいいですか?

編集:私の元の質問は少しXYの問題、その点はお詫び申し上げます。私の場合はカラーコードを修正する必要があるので、XX実際には太い青のコード[1;34mYY太い灰色のコードになりました[1;90m

[1;34mただし、同じ行(最後の行を含む)に3つ以上のインスタンスを持つことができます。

もう一度時間を無駄にしたら謝ります。この回避策は私の状況に簡単に適用できるようです。

ベストアンサー1

使用標準sed:

$ printf 'XXthisXXisXXjust\nXXa\nXXtest\n' | sed 's/XX/YY/g; s/\(.*\)YY/\1XX/'
YYthisYYisXXjust
XXa
XXtest

コードsedコメント:

s/XX/YY/g;              # change all XX to YY
s/\(.*\)YY/\1XX/;       # replace last YY with XX

YY2番目の交換は、変更された行の最後の置換を置き換えます。XXこれは.*欲が多いからです。

もしそうXXなら[1;34mYYそうであれば[1;90m

sed 's/\[1;34m/[1;90m/g; s/\(.*\)\[1;90m/\1[1;34m/'

正規表現で一致させるようにエスケープする[必要があります。\[

おすすめ記事