sedを使用して文字列の値を変更しながら文字列をそのまま保持する方法は?
例えばecho "01XX1234"
XX
16進値に置き換えて、合計を01
変更せずに維持したいと思います1234
。私が考えることができるすべての組み合わせを試しましたが、sed
それでも敗北しました。
これを行うことはできますが、より簡単な方法はありますか?
echo "01XX1234" | sed -n 's/\(01..1234\)/01AB1234/g'
答え1
sed
文字列の一致する部分文字列のみが置き換えられます。
$ echo '01XX1234' | sed 's/XX/AF/'
01AF1234
3 番目と 4 番目の文字は常に置き換えられ、最初と 2 番目の文字は変更しない場合は次のようになります。
$ echo '01XX1234' | sed 's/\(.\{2\}\).\{2\}/\1AF/'
01AF1234
\{2\}
前の文字が2回表示されることを意味します(この場合は.
任意の文字)。\(...\)
括弧は一致グループを作成するために使用されます。後でパターンまたは代替文字列で一致する部分文字列を参照できます。\1
最初に一致する部分文字列を表します(この場合は「01」)。
答え2
echo "01XX1234" | sed 's/XX/AB/'
または
echo "01XX1234" | sed 's/\(01\).*\(1234\)/\1AB\2/'
答え3
予約済みスペースの使用:
> echo "01XX1234" | sed -n 'h;s/01..1234/01AB1234/g;p;x;p'
01AB1234
01XX1234
sed コマンド:
- h -->パターンスペースをストレージスペースに移動します。
- 血 --> 印刷
- x --> ホールド空間とパターン空間の交換