Eliminar ciertas líneas en un archivo txt a través de un archivo por lotes

Tengo un archivo txt generado. Este archivo tiene ciertas líneas que son superfluas y deben eliminarse. Cada línea que requiere eliminación tiene una de dos cadenas en la línea; “ERROR” o “REFERENCIA”. Estos tokens pueden aparecer en cualquier lugar de la línea. Me gustaría eliminar estas líneas, conservando todas las demás líneas.

Entonces, si el archivo txt se ve así:

 Buena línea de datos
 línea incorrecta de C: \ Directory \ ERROR \ myFile.dll
 Otra buena linea de datos
 línea mala: REFERENCIA 
 Buena linea

Me gustaría que el archivo termine así:

 Buena línea de datos
 Otra buena linea de datos
 Buena linea

TIA.

Use lo siguiente:

type file.txt | findstr /v ERROR | findstr /v REFERENCE 

Esto tiene la ventaja de utilizar herramientas estándar en el sistema operativo Windows, en lugar de tener que buscar e instalar sed / awk / perl y tal.

Vea la siguiente transcripción para que esté en funcionamiento:

 C: \> tipo archivo.txt
 Buena línea de datos
 línea incorrecta de C: \ Directory \ ERROR \ myFile.dll
 Otra buena linea de datos
 línea mala: REFERENCIA
 Buena linea

 C: \> tipo archivo.txt |  findstr / v ERROR |  findstr / v REFERENCIA
 Buena línea de datos
 Otra buena linea de datos
 Buena linea

Puede lograr la misma solución que @ paxdiablo usando solo findstr por sí mismo. No es necesario conectar varios comandos juntos:

 findstr /V "ERROR REFERENCE" infile.txt > outfile.txt 

Detalles de cómo funciona esto:

  • / v encuentra líneas que no coinciden con la cadena de búsqueda (se utiliza el mismo interruptor que @paxdiablo)
  • si la cadena de búsqueda está entre comillas, realiza una búsqueda O, usando cada palabra (el separador es un espacio)
  • findstr puede tomar un archivo de entrada, no necesita alimentarlo con el comando “tipo”
  • “> outfile.txt” enviará los resultados al archivo outfile.txt en su lugar, imprimiéndolos en su consola. (Tenga en cuenta que sobrescribirá el archivo si existe. Use “>> archivo_explo.txt” en su lugar si desea agregar).
  • También podría considerar agregar el modificador / i para hacer una coincidencia insensible a mayúsculas y minúsculas.

Si tienes sed:

sed -e ‘/ REFERENCE / d’ -e ‘/ ERROR / d’ [FILENAME]

Donde FILENAME es el nombre del archivo de texto con las líneas buenas y malas

Si tiene Perl instalado, entonces perl -i -n -e"print unless m{(ERROR|REFERENCE)}" haga el truco.