Reemplazar cadena por nueva línea + cadena en un archivo grande

0

Necesito reemplazar la cadena ),( con )\n,( en un archivo de 10GB. El \ n en este caso obviamente significa una nueva línea. Lo he intentado con este comando:

sed -i '' '/),(/ s//),\n(/g' bigfile.sql

Sin embargo, eso realmente no funcionó como se esperaba. Reemplazó la cadena, pero no insertó una nueva línea, sino simplemente una "n" (por lo que simplemente descuidó la barra invertida y la escapó). ¿Alguna otra opinión sobre esto, o dónde está mi error en el comando anterior?

    
pregunta Maximilian Krause 03.09.2018 - 00:53

1 respuesta

0

Probar

sed -i '' $'/),(/ s//),\\n(/g' bigfile.sql
  • $'...' indica que la cadena es una cadena de estilo C. Esto le permite utilizar los escapes \ y \n , entre otros.
  • En lugar de \n , tenemos un \ y luego un \n . Esto pasa una barra invertida literal, y luego una nueva línea literal, a sed . Esto le permite reconocer que la nueva línea es una parte del patrón, en lugar de terminarlo.

Lo siguiente también funciona:

sed -i '' '/),(/ s//),\
(/g' bigfile.sql
    
respondido por el 0942v8653 03.09.2018 - 01:11

Lea otras preguntas en las etiquetas