Altere uma string com sed

Altere uma string com sed

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 determinado número. Preciso alterar a última parte do nome do processo para outro script que utilize esse nome. O problema é que os nomes terminam em 00001 .

Eu tentei algo como

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

mas o problema é óbvio. Ele também altera as strings corretas. Minha dúvida é: existe uma maneira de poder usar o sed para fazer a alteração corretamente quando a cadeia for de 0,00.000 a 0001 sem alterar as outras?

Suponhamos que eu tenha 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

A primeira e a última estão corretas. Eu preciso conseguir 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

Responder1

Isso substituirá a terceira ocorrência no espaço padrão da correspondência mais longa possível por 0 ou mais caracteres sem sublinhado para a string00001.

 sed 's/[^_]*/00001/3' <in >out

Responder2

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:~$

informação relacionada