数字の前にある文字のみを置き換える

数字の前にある文字のみを置き換える

以下を含むファイルがあるとしましょう。

abcxd,abcx,6000/600x1

前に数字があるものにx置き換える必要があります。*頑張った

sed 's/[0-9]x/*/g'

ただし、予想される出力は次のようになるため、間違っています。

abcxd,abcx,6000/600*1

答え1

キャプチャグループと逆参照の使用

$ echo 'abcxd,abcx,6000/600x1' | sed 's/\([0-9]\)x/\1*/g'
abcxd,abcx,6000/600*1
  • \([0-9]\)参照できるように番号をキャプチャしてください。\1
  • EREを使用すると、構文は次のようになります。sed -E 's/([0-9])x/\1*/g'
  • g複数の一致を交換する必要がある場合は、修飾子を使用してください。


このような正規表現スタイルの場合は、pcre次のものを使用できます。周りを見てください

$ echo 'abcxd,abcx,6000/600x1' | perl -pe 's/\d\Kx/*/g'
abcxd,abcx,6000/600*1

答え2

この試み:

$ echo "abcxd,abcx,6000/600x1" |\
sed -E 's/^([a-z,]*)([0-9\/]*)(x)(.*$)/\1\2*\4/'

関連情報