GNU/Linux >> Tutoriales Linux >  >> Linux

¿Usar Sed para agregar un carácter en la posición N de la cadena coincidente?

Necesito agregar un carácter en la posición n (en este caso, la 2) de una cadena coincidente.
Por ejemplo, en un archivo text.txt Me gustaría agregar una N antes de la cadena y después del " solo en las cadenas que contienen blah

texto.txt:

"1blah8","na","8blah4"  
"2blah5","na","10blah4"  
"5blah5","na","1blah234"  

Quiero obtener un text2.txt:

"Ν1blah8","na","Ν8blah4"  
"Ν2blah5","na","Ν10blah4"  
"Ν5blah5","na","Ν1blah234"  

He probado sed 's/.*blah.*/N&/' text.txt > text2.txt
pero obtengo el N antes del " y solo en la primera cadena encontrada de cada línea.

Respuesta aceptada:

Otro enfoque:

$ sed 's/"([^"]*blah[^"]*")/"N1/g' test.txt 
"N1blah8","na","N8blah4"  
"N2blah5","na","N10blah4"  
"N5blah5","na","1blah234

La expresión regular está buscando un " , luego 0 o más que no sean " caracteres seguidos de un blah , y luego 0 o más que no sean " otra vez. Debido a los paréntesis, esto se captura y luego puede ser referido como 1 . Por lo tanto, el comando sustituirá el patrón coincidente consigo mismo (1 ) pero con un "N adjunto. Por eso el primer " está fuera de los paréntesis. El /g El modificador al final hace que sustituya todas las cadenas coincidentes en cada línea.

Si su sed versión lo admite, puede simplificarlo a:

sed -E 's/"([^"]*blah[^"]*")/"N1/g'

Linux
  1. Cómo usar el comando WC para imprimir caracteres, bytes, saltos de línea y recuento de palabras en Linux

  2. ¿Cómo reemplazar una cadena en un archivo (s)?

  3. ¿Cómo usar Sed para reemplazar una cadena de varias líneas?

  4. Sed:¿Insertar texto después del enésimo carácter antes o después de una cadena determinada?

  5. Bash:agregue una cadena al final del archivo sin salto de línea

Sustitución de cadena en Bash

CÓMO UTILIZAR EL COMANDO DE COLA

Cómo usar el comando principal

CÓMO UTILIZAR EL EDITOR SED

Los 20 mejores comandos sed para usar

Cómo usar Sed para buscar y reemplazar una cadena en un archivo