sed を使用してパターンを照合すると、一致したパターンが「アンパサンド」(&) 変数に格納されます。アンパサンド自体を使用して、この一致したパターンの文字を置き換える方法はありますか?
たとえば、& に文字列「apple1」が含まれている場合、& を使用して文字列を「apple2」にする (つまり、1 を 2 に置き換える) にはどうすればよいですか?
私の推測が正しければ、あなたがしたいことは、一致したパターンに置換を適用することです。を使用してそれを行うことはできません&
。代わりにこれを行いたい:
echo apple1 apple3 apple1 apple2 botemo1 | sed '/apple./ { s/apple1/apple2/g; }'
これは、 pattern に一致する行でのみコマンド置換を実行することを意味します/apple./
。
キャプチャ グループを使用することもできます。キャプチャは、一致の一部を取得し、それを補助変数に保存するために使用されます。補助変数には、キャプチャが表示される順序で番号が付けられます。
echo apple1 | sed -e 's/\(a\)\(p*\)\(le\)1/\1\2\32/g'
3 つのキャプチャを使用しました。
\1
は、「a」が含まれています\2
は、一連の「p」が含まれています (この例では、「pp」が含まれています)。\3
は、シーケンス「le」が含まれています。これで、キャプチャした一致を使用して置換を印刷できます: \1\2\32
. \32
3 つのキャプチャ値を使用して「apple」を生成し、2 を追加していることに注意してください。合計 9 つのキャプチャしか持てないため、これは変数として解釈されません。
これが役立つことを願っています=)
最初にパターンを一致させ、一致した場合はテキストを変更できます。
echo "apple1" | sed '/apple/s/1/2/' # gives you "apple2"
このコードは、次を含むすべての行でに変更1
されます2
apple
これはうまくいくかもしれません (GNU sed と Bash):
sed 's/apple1/sed "s|1|2|" <<<"&"/e' file