Pregunta ¿Eliminar todas las líneas en Notepad ++ excepto las líneas que contienen una palabra que necesito?


Tengo un archivo de texto y quiero mantener las líneas comenzadas con <Path>y borra todas las otras líneas

¿Cómo puedo hacerlo?


174


origen


Relacionado: stackoverflow.com/questions/8264391/... - Cees Timmerman
El plugin LineFilter2 también es fácil de usar. - Karsten


Respuestas:


Hay una manera fácil de lograr esto. Debe realizar 3 pasos.

  1. Vaya al menú Buscar> Buscar ...> Seleccione la pestaña "Marcar". Activar expresiones regulares Buscar ^<Path> (^ es para el inicio de línea). No olvides marcar "Marcar líneas" y presionar "Marcar todo"

    ==> Todas las filas que quieras mantener tienen un marcador

  2. Vaya al Menú "Buscar - Marcador - Marcador inverso"

    ==> Todas las líneas que desea eliminar están marcadas.

  3. Vaya al Menú "Buscar - Marcador - Eliminar líneas marcadas"

    ==> Todas las líneas marcadas se eliminan.


252



+1. Bien, no sabia sobre esto. También hay opciones para "Eliminar líneas sin marcar" o "Cortar / copiar líneas marcadas" que pueden ahorrar algo de tiempo. - deizel
Al principio tuve problemas porque mi versión (6.2.3) de Notepad ++ no tiene un elemento de menú llamado "Marcar pestaña". En su lugar, debe ir a "Buscar" -> "Buscar ..." -> haga clic en la pestaña "Marcar". Y ya no tienes que invertir los marcadores. Notepad ++ ahora tiene "Eliminar líneas no marcadas". ¡Pero tu consejo me ayudó mucho! ¡Gracias! - Adam
Puede omitir el paso 2, porque es (al menos desde v6.4.5) posible elegir "Eliminar líneas no marcadas". - Nailuj
Estoy usando Notepad ++ durante tanto tiempo y nunca he sabido qué son 'Marcadores' antes. Es increíble lo poderosa que es esa herramienta y lo poco que sé sobre ella. - Danubian Sailor
Eres un genio este es solo otro ejemplo impactante de cómo llegar a conocer la herramienta que utiliza de verdad. - Marcello Grechi Lins


Esto realmente se puede hacer en dos pasos a partir de 6.3. Creo que se puede hacer antes que eso ya que tenía 5.9 cuando lo probé por primera vez.

Usar la publicación de Stema como la base de esta respuesta. Hay un paso menos ahora. Marque las líneas y elimine las líneas no marcadas. Hecho. Las instrucciones detalladas siguen.

  1. Menú de búsqueda "Buscar". En el cuadro de diálogo Buscar, haga clic en la pestaña "Marcar". Activar expresiones regulares La búsqueda de ^ (^ es para el inicio de línea). No olvides marcar "Marcar líneas" y presionar "Marcar todo"

    ==> Todas las filas que quieras mantener tienen un marcador

  2. Menú de búsqueda -> Marcador -> Eliminar líneas no marcadas.

    ==> Todo NO Las líneas marcadas se eliminan.


56



Esto me llevó 10 segundos, mientras que la otra solución me llevó más de 20 segundos. ¡Gracias! - Black


Limpiar solo la solución regex

Variante de dos pasos

  1. regex reemplazar

    (?!^.*test.*$)^.+
    

    reemplace la prueba con el texto solicitado

  2. reemplazar

    [\r\n]{2,}
    

    con \r\n

Variante de un solo paso

Utilizar ^(?!<Path>).*\r\n para reemplazar las coincidencias con una cadena vacía. La versión generalizada sería ^(?!.*?test).*\r\n. Esto no eliminará la línea vacía al final del archivo. Todas las demás líneas se eliminan, incluidas varias líneas vacías consecutivas.

Explicación:

  1. (?!) es una mirada negativa. ^.*test.*$  selecciona la línea completa que contiene el texto solicitado.

  2. [\r\n]{2,} coincide con cualquier \r\n eso ocurre más de una vez, esta es la nueva línea de Windows. si tiene Linux u otro sistema operativo, es posible que deba meterse con esto. el segundo es reemplazarlo por una línea de retorno.


25



Nota para los pueblos: A veces, la expresión regular con fin de línea (EOL) "no funciona". los \r\n EOL mencionado en la publicación es lo que Windows usa y, por lo tanto, puede ser o no lo que estás buscando. A menudo en entornos Linux es solo \n, o en entornos Mac simplemente \r, por lo tanto, si extraes un archivo de alguno de ellos, no será EOL de Windows. Sin embargo, si descarga a través de activadores de modo FileZilla y ASCII, puede cambiarlos de vuelta a Windows EOL (me gusta \n dentro \r\n) Por lo tanto, si la expresión regular no funciona, compruebe el estilo de EOL yendo a "Ver> Mostrar símbolos> Mostrar fin de línea". CR = \r. LF = \n. - dhaupin


Me parece que la forma más fácil es simplemente usar la función "Buscar todos en el documento actual" y luego copiar los resultados en un nuevo archivo o seleccionar todo y reemplazar en el actual.

Esto encontrará todas las líneas que contienen su texto y las enumerará en la parte inferior. Simplemente haga clic derecho en el resultado de búsqueda y copie / pegue.


5



Tienes que eliminar los números de línea reemplazando \tLine [\d]*: . Sigue siendo una gran respuesta. - Noumenon


Ir al menú Buscar -> Encontrar... -> Activar expresiones regulares. Buscar "^Camino"(^ es para el inicio de línea).

Haga clic en el botón "Buscar todo en el documento actual".

La ventana "Buscar resultado" aparecerá con todas las líneas del patrón. Seleccione copiarlos / pegarlos en una nueva pestaña en Notepad ++.

En esta nueva pestaña, llegó a: menú Buscar -> Reemplazar... -> Activar expresiones regulares.

En el campo "Buscar qué:", use el patrón: "Línea \ d +:". Deje el campo "Reemplazar con:" en blanco.

Haga clic en el botón "Reemplazar todo".


4





Siempre que realmente quieras unir <Path> y no una ruta del sistema de archivos, puede probar esto desde una línea de comando usando Perl:

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

Funcionó con Strawberry Perl en Windows, así que ajuste en consecuencia si los resultados no son los esperados.


3





Es torpe, pero cópialo todo para Sobresaliry luego usa =IF(LEFT(A1,6)="<Path>",A1,"") y copia esa fórmula hasta el final. Luego copia eso de vuelta a Notepad ++. No es ideal, pero es bastante fácil (si tienes Excel). Advertencia: no funcionará bien con líneas sangradas (Excel cambiará las columnas, etc.).


3



Cuando hay varias maneras de manejar esta tarea directamente, ¿por qué querría copiar de forma destructiva en otra aplicación, procesar allí y transferir de nuevo? - Baldrickk


No hay una manera fácil de hacer lo que quiere con Notepad ++. Necesitarás descargar un programa en tu computadora o escribir algo en VB (supongo que estás en Windows).

Puedes hacer lo que quieras de una de dos maneras con sed. La utilidad sed es una de las favoritas de * nix y se puede encontrar para Windows de la gran gente de GnuWin (http://gnuwin32.sourceforge.net/packages/sed.htm) Descargue este programa y luego ejecute su comando desde el símbolo del sistema.

Eliminar todas las líneas que no contengan:
sed -i '/^<PATH>/!d' file

Imprime todas las líneas que contienen un nuevo archivo:
sed -n '/^<PATH>/p' file > newfile

Le sugiero que use imprimir las líneas que desea a un nuevo archivo. La razón de esto es que probablemente no recibirá la declaración de expresiones regulares por primera vez. La utilidad sed usa la sintaxis básica de expresión regular (ver la referencia en http://www.regular-expressions.info/reference.html) Si es algo así como una ruta * nix (/ var / www), entonces deberá escapar del carácter / para que su expresión regular funcione.

Ejemplo: sed -n '/^\/var\/www/p' file > newfile 
Esto imprimirá todas las líneas que comiencen con '/ var / www'. Si archivé para escapar del carácter /, entonces el comando habría arrojado un error. Puede escapar de un carácter especial (como /) con el carácter de barra invertida \.


2





Use Buscar-> Reemplazar e ingrese una expresión regular como ^[^ ].* y reemplaza todo con una cadena vacía usando Regular expression. El siguiente paso es encontrar líneas vacías buscando \n\n reemplazando con \n utilizando Extended varias veces hasta 0 occurrences were found. (utilizar \r\n\r\n y \r\n dependiendo del formato de archivo). Si tiene muchas líneas vacías en una fila, es más rápido de usar \n\n\n\n\n\n\n o incluso más \n: s en la cadena de búsqueda.


0





Mejor solución con regex replace:

(?!^.*SOMETEXT.*$)^.+\r?\n

Y reemplazar con nada


0



Bienvenido a Super Usuario! ¿Le importa explicar esto a quienes quizás no saben lo que hace cada bit de la expresión regular? :) - bertieb