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'