次のように構成された文字列があります。
XXthisXXisXXjust\nXXa\nXXtest
XX
各文字の前の最後の文字を次のように変更したいと思います。\n
YY
$ echo "XXthisXXisXXjust\nXXa\nXXtest"
XXthisXXisXXjust
XXa
XXtest
しなければならない
$ echo "XXthisXXisXXjust\nXXa\nXXtest" | ???
YYthisYYisXXjust
XXa
XXtest
どうすればいいですか?
編集:私の元の質問は少しXYの問題、その点はお詫び申し上げます。私の場合はカラーコードを修正する必要があるので、XX
実際には太い青のコード[1;34m
とYY
太い灰色のコードになりました[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
YY
2番目の交換は、変更された行の最後の置換を置き換えます。XX
これは.*
欲が多いからです。
もしそうXX
なら[1;34m
、YY
そうであれば[1;90m
sed 's/\[1;34m/[1;90m/g; s/\(.*\)\[1;90m/\1[1;34m/'
正規表現で一致させるようにエスケープする[
必要があります。\[