Regex: eliminar líneas que contengan "ayuda", etc.

372

Tengo un largo documento de comandos. Usando Notepad ++ o regex, quiero eliminar todas las líneas que contienen "ayuda" incluyendo keyboard_help, etc.

¿Cómo se puede hacer esto?

limón
fuente

Respuestas:

947

Esto también es posible con Notepad ++:

  • Vaya al menú de búsqueda, Ctrl+ F, y abra la pestaña Marcar .
  • Verifique la línea de Marcador (si no hay una actualización de la pestaña Marca en la versión actual).

  • Ingrese su término de búsqueda y haga clic en Marcar todo

    • Todas las líneas que contienen el término de búsqueda están marcadas.
  • Ahora vaya al menú BuscarMarcadorEliminar líneas marcadas

  • Hecho.

Stema
fuente
36
¡Si! También tiene 'Eliminar líneas sin marcar', que es como grep, ¡exactamente lo que necesitaba!
Chloe
66
Gracias, este es un buen truco. Prefiero hacerlo con unos simples clics que encender una consola Unix (ignorando que estoy principalmente en Windows), cden la ruta y escribir un comando complejo (preocupándome por la sintaxis y por atornillar permanentemente y luego darse cuenta no hay respaldo). [ No me malinterpretes, uso comandos de consola todo el tiempo para otras cosas, pero para algo como esto, es simplemente una exageración.]
ADTC
2
Me ahorró mucho tiempo :-)
Brlja
3
la comprobación BOOKMARK LINEes importante aquí, de lo contrario no funcionará.
HaSeeB MiR
1
@ AndrewSchultz, lo siento, pero no.
Stema
187

Otra forma de hacer esto en Notepad ++ es todo en el cuadro de diálogo Buscar / Reemplazar y con expresiones regulares:

  • Ctrl+ hpara que aparezca el cuadro de diálogo buscar reemplazar.

  • En el Find what:cuadro de texto incluya su expresión regular: .*help.*\r?\n(donde \res opcional en caso de que el archivo no tenga terminaciones de línea de Windows).

  • Deje el Replace with:cuadro de texto vacío.

  • Asegúrese de que esté seleccionado el botón de opción Expresión regular en el área Modo de búsqueda. Luego haga clic Replace Ally listo! helpSe han eliminado todas las líneas que contienen su término de búsqueda .

Reemplazo de línea de procedimientos en N ++

OozeMeister
fuente
17
mejor respuesta que usando la pestaña marca, ya que esto se puede hacer para "Buscar en archivos"
Alex
2
Asegúrese de escapar de caracteres especiales como paréntesis con una barra diagonal inversa.
Noumenon
44
asegúrese de desmarcar ". coincide con la nueva línea"
MagTun
1
Mejor respuesta debido a un mayor rendimiento. Con archivos de> 1 millón de líneas, el método de marcador se estira al máximo, también en máquinas modernas.
Roland Ettinger
18

Tarea fácil con grep:

grep -v help filename

Agregar > newFileNamepara redirigir la salida a un nuevo archivo.


Actualizar

Para aclararlo, el comportamiento normal será imprimir las líneas en la pantalla. Para canalizarlo a un archivo, >se puede usar. Por lo tanto, en este comando:

grep -v help filename > newFileName
  1. grepllama al grepprograma, obviamente
  2. -ves una bandera para invertir la salida. Por defecto, grepimprime las líneas que coinciden con el patrón dado. Con esta bandera, imprimirá las líneas que no coinciden con el patrón.
  3. help es el patrón a juego
  4. filename es el nombre del archivo de entrada
  5. > redirige la salida al siguiente elemento
  6. newFileName el nuevo archivo donde se guardará la salida.

Como habrá notado, no eliminará elementos de su archivo. greplo leerá y se guardará otro archivo, modificado en consecuencia.

sidyll
fuente
@ Kevin Duke: ¡Ay! Eso probablemente significa que no tienes grepinstalado. De todos modos, te recomiendo que instales GNU grep, ciertamente funcionará en Windows, y es una herramienta realmente útil.
sidyll
@sidyll sabía lo que era grep e hizo un montón de resultados, podría haber sido porque no especifiqué un archivo de salida
limón
2
@Kevin Duke: como dije anteriormente en la respuesta, la salida se puede redirigir. El comportamiento estándar es imprimir en la pantalla. Para redirigir, se utiliza un tubo ( >en este caso), dando una orden final degrep -v help filename > outputFileName
sidyll
¡Gracias, definitivamente intentaré esto!
limón
grep> sed cualquier día de la semana para ENCONTRAR secuencias de personajes
kwikness
13

Puedes hacer esto usando sed: sed '/help/ d' < inputFile > outputFile

Tikhon Jelvis
fuente
44
@CengizFrostclaw: en la línea de comandos en Linux / Mac / Lo que sea. Si está en Windows, tendría que instalar algo como CygWin y usarlo.
Tikhon Jelvis
Gracias @TikhonJelvis! Y una última pregunta, ¿podemos hacer 'ayuda /' para eliminar todas las líneas que comienzan (que no contienen) con ayuda?
Jeff
3
@CengizFrostclaw: Creo que sed '/^help/ d'debería funcionar. El ^representa el inicio de la línea.
Tikhon Jelvis
@jeff PowerShell tiene sedygrep
Ooker
Cygwin puede no funcionar en Windows con archivos utf-16. Las utilidades de Cygwin usan UFT-8 por defecto. Muy pocos de ellos son compatibles con UTF-16. Utilice babun babun.github.io . Actúa como un envoltorio alrededor de cygwin, pero proporciona muchas cosas fuera de la caja.
Sahil Singh
9

Buscar con una expresión regular:

^.*(help).*$
Rob Rob
fuente
2
¿Qué pasa con la parte de eliminación?
Peter Mortensen
1
@PeterMortensen Find \n\n, reemplace con `` (nada)
Leo
6

Si estás en Windows , inténtalo findstr. No se necesitan herramientas de terceros:

findstr /V /L "searchstring" inputfile.txt > outputfile.txt

¡También es compatible con expresiones regulares! Solo lea la ayuda de la herramienta findstr /?.

PD: si desea trabajar con archivos grandes y grandes (como archivos de registro de 400 MB), un editor de texto no es muy eficiente con la memoria, por lo que, como alguien ya señaló, las herramientas de línea de comandos son el camino a seguir. Pero no hay grep en Windows, así que ...

Acabo de ejecutar esto en un archivo de registro de 1 GB, y literalmente tardó 3 segundos.

Alex
fuente