仅替换前面有数字的字符

仅替换前面有数字的字符

假设我有一个文件包含

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/'

相关内容