Substituir um caracter somente se precedido por um dígito

0

Suponha que eu tenha um arquivo contendo

abcxd,abcx,6000/600x1

Eu preciso substituir o x to * que tem um número na frente dele. Eu tentei

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

mas está errado, pois a saída esperada é:

abcxd,abcx,6000/600*1
    
por Dipanjan Pan 18.07.2017 / 16:20

2 respostas

3

Use grupos de captura e referências anteriores

$ echo 'abcxd,abcx,6000/600x1' | sed 's/\([0-9]\)x/*/g'
abcxd,abcx,6000/600*1
  • \([0-9]\) captura esse dígito para que possa ser referenciado
  • Com o ERE, a sintaxe seria sed -E 's/([0-9])x/*/g'
  • use o modificador g se houver várias correspondências a serem substituídas


Com sabores de regex como pcre , pode-se usar lookarounds

$ echo 'abcxd,abcx,6000/600x1' | perl -pe 's/\d\Kx/*/g'
abcxd,abcx,6000/600*1
    
por 18.07.2017 / 16:48
0

Tente isto:

$ echo "abcxd,abcx,6000/600x1" |\
sed -E 's/^([a-z,]*)([0-9\/]*)(x)(.*$)/*/'
    
por 18.07.2017 / 16:28