Ejemplo:
1:20 2:25 3:0.432 2:-17 10:12
Quiero reemplazar todas las cadenas que comienzan con 2: a 2:0 .
Salida:
1:20 2:0 3:0.432 2:0 10:12
Respuesta aceptada:
Usando sed :
sed -E 's/((^| )2:)[^ ]*/\10/g' in > out
Además, inspirado en la respuesta de souravc, si no posibilidad de un 2: subcadena después del comienzo de una cadena no que contiene un 2: inicial subcadena (por ejemplo, hay no posibilidad de un 1:202:25 cadena, que el siguiente comando abreviado reemplazaría a 1:202:0 ), el comando podría acortarse a esto:
sed -E 's/2:[^ ]*/2:0/g' in > out
Desglose de los comandos n.° 1 y n.° 2 :
-E:hacesedinterpretar el patrón como un patrón ERE (expresión regular extendida);> out:redirigestdoutaout;
sed desglose del comando n.º 1 :
s:afirma que realiza una sustitución/:comienza el patrón(:inicia el grupo de captura(:comienza a agrupar las cadenas permitidas^:coincide con el inicio de la línea|:separa la segunda cadena permitida:coincide con unpersonaje):deja de agrupar las cadenas permitidas2:coincide con un2personaje::coincide con un:personaje):detiene el grupo de captura[^ ]*:coincide con cualquier número de caracteres que no sean/:detiene el patrón / inicia la cadena de reemplazo\1:referencia inversa reemplazada con el primer grupo de captura:añade unpersonaje/:detiene la cadena de reemplazo / inicia las banderas de patróng:afirma realizar la sustitución globalmente, es decir, sustituir cada aparición del patrón en la línea
sed desglose del comando n.° 2 :
s:afirma que realiza una sustitución/:comienza el patrón2:coincide con un2personaje::coincide con un:personaje[^ ]*:coincide con cualquier número de caracteres que no sean/:detiene el patrón / inicia la cadena de reemplazo2:0:añade un2:0cadena/:detiene la cadena de reemplazo / inicia las banderas de patróng:afirma realizar la sustitución globalmente, es decir, sustituir cada aparición del patrón en la línea