GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Cómo reemplazar todas las cadenas en un archivo que comienza con algún prefijo?

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 :hace sed interpretar el patrón como un patrón ERE (expresión regular extendida);
  • > out :redirige stdout a out;

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 un personaje
  • ) :deja de agrupar las cadenas permitidas
  • 2 :coincide con un 2 personaje
  • : :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 un personaje
  • / :detiene la cadena de reemplazo / inicia las banderas de patrón
  • g :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ón
  • 2 :coincide con un 2 personaje
  • : :coincide con un : personaje
  • [^ ]* :coincide con cualquier número de caracteres que no sean
  • / :detiene el patrón / inicia la cadena de reemplazo
  • 2:0 :añade un 2:0 cadena
  • / :detiene la cadena de reemplazo / inicia las banderas de patrón
  • g :afirma realizar la sustitución globalmente, es decir, sustituir cada aparición del patrón en la línea

Ubuntu
  1. ¿Reemplazar nueva línea con Nul?

  2. ¿Cómo generar un archivo e ignorar las líneas que comienzan con "?"?

  3. ¿Cómo asociar todos los tipos de archivos dentro de Wine con su aplicación nativa correspondiente?

  4. ¿Cómo ocultar archivos con una extensión específica?

  5. ¿Cómo se reemplaza el texto similar a sed con python?

Cómo manejar archivos con Scilab en Ubuntu 15.04

Cómo leer un archivo con espacios en Linux

Cómo ejecutar comandos de archivo .sh todo a la vez en Linux

Cómo reemplazar espacios en nombres de archivos con guiones bajos en el shell de Linux

¿Cómo obtener el enlace del archivo para descargar con Wget?

¿Cómo reemplazar un archivo en jar con línea de comando en Linux?