pt regex não funciona

0

regex para procurar números ou letras minúsculas de comprimento 46 e acrescentar 0 no final.

C:\Users\svuppula>echo "0020000000000000100000000000000000000000000001" | sed -e 's/[0-9a-z]{45}//g'
sed: -e expression #1, char 20: invalid reference  on 's' command's RHS

onde grep trabalha

C:\Users\svuppula>echo "0020000000000000100000000000000000000000000001" | grep -E '[0-9a-z]{45}'
"0020000000000000100000000000000000000000000001"

versões:

C: \ Users \ svuppula > sed - versão

sed (GNU sed) 4.2.2

C: \ Users \ svuppula > grep --version

grep (GNU grep) 2.24
    
por would_like_to_be_anon 14.03.2017 / 17:20

1 resposta

3

refere-se ao primeiro grupo entre parênteses, mas você não tem nenhum. Adicione os parênteses ou use & para preencher toda a string correspondente:

$ echo "foobar" | sed -e 's/foo/&ABC/'
fooABCbar
$ echo "foobar" | sed -re 's/(foo)/ABC/'
fooABCbar

Observe que você precisa de -r no GNU sed para usar os parênteses e também com a correspondência de contagem {NN} . (a menos que você queira usar as barras invertidas feias em todos eles).

Então:

echo "0020000000000000100000000000000000000000000001" | sed -re 's/([0-9a-z]{45})//g'
00200000000000001000000000000000000000000000091

Essa sequência de dígitos tem 46 caracteres, mas o regex corresponde apenas a 45 caracteres, portanto, o nove é adicionado antes do último dígito. Ancore o regexp para o início e o fim da linha, se desejar processar apenas linhas com exatamente 45 caracteres.

$ echo "002000000000000010000000000000000000000000001" | sed -re 's/^[0-9a-z]{45}$/&9/g'
0020000000000000100000000000000000000000000019

(Eu mudei o número adicionado a um nove para que ele não se misturasse com os zeros na entrada).

    
por 14.03.2017 / 17:27