以下を含むファイルがあるとしましょう。
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/'