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'