Después de usar un filtro para obtener una lista de procesos como el siguiente:
FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_0000
FOO_ABCCDAA_00
FOO_12345678_0
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001
La cuerda se corta cuando la longitud excede un número determinado. Necesito cambiar la última parte del nombre del proceso por otro script que use ese nombre. El problema es que los nombres terminan en 00001.
He probado algo como
[...]|sed 's/000/00001/g[...]
pero el problema es obvio. También cambia las cadenas correctas. Mi pregunta es, ¿hay alguna manera de poder usar sed para hacer el cambio correctamente cuando la cadena es de 0,00,000 a 0001 sin alterar las demás?
Supongamos que tengo la lista anterior:
FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_0000
FOO_ABCCDAA_00
FOO_12345678_0
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001
El primero y el último son correctos. Necesito 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
Gracias
Respuesta1
Esto sustituirá la tercera aparición en el espacio de patrón de la coincidencia más larga posible por 0 o más caracteres sin guión bajo para la cadena.00001
.
sed 's/[^_]*/00001/3' <in >out
Respuesta2
Finalmente
virt01@virt01:~$ sed 's/_0*$/_00001/g' some.txt
somestring_oooo_00001
somestring_oooo_00001
somestring_oooo_00001
virt01@virt01:~$
Exactamente para tus datos
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:~$