Altera uma string com sed

1

Depois de usar um filtro para obter uma lista de processos como o próximo:

FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_0000
FOO_ABCCDAA_00
FOO_12345678_0
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001

A corda é cortada quando o comprimento excede um certo número. Eu preciso alterar a última parte do nome do processo para outro script que usa esse nome. O problema é que os nomes terminam em 00001.

Eu tentei algo como

[...]|sed 's/000/00001/g[...]

mas o problema é óbvio. Altera as seqüências corretas também. Minha pergunta é, existe uma maneira de usar o sed para fazer a mudança corretamente quando a cadeia é de 0,00,000 a 0001 sem alterar os outros?

Vamos supor que eu tenho a lista acima:

FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_0000
FOO_ABCCDAA_00
FOO_12345678_0
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001

O primeiro e o último estão corretos. Eu preciso de algo como:

FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_00001
FOO_ABCCDAA_00001
FOO_12345678_00001
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001

Obrigado

    
por Jesus Cepeda 13.02.2016 / 06:53

2 respostas

1

Finalmente

virt01@virt01:~$ sed 's/_0*$/_00001/g' some.txt
somestring_oooo_00001
somestring_oooo_00001
somestring_oooo_00001
virt01@virt01:~$

Exatamente para seus dados

virt01@virt01:~$ cat some.txt
FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_0000
FOO_ABCCDAA_00
FOO_12345678_0
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001
virt01@virt01:~$ sed 's/_0*$/_00001/g' some.txt
FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_00001
FOO_ABCCDAA_00001
FOO_12345678_00001
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001
virt01@virt01:~$

Espero que ajude.

    
por 13.02.2016 / 07:05
2

Isso substituirá a terceira ocorrência no padrão de espaço da correspondência mais longa possível para 0 ou mais caracteres não sublinhados da string 00001 .

 sed 's/[^_]*/00001/3' <in >out
    
por 13.02.2016 / 09:51

Tags