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