El complemento LineFilter2 también es fácil de usar.
Karsten
Respuestas:
292
Hay una manera fácil de lograr esto. Necesitas realizar 3 pasos.
Vaya al menú Buscar> Buscar ...> Seleccione la pestaña "Marcar". Activar expresiones regulares. Busque ^<Path>( ^es para inicio de línea). No olvide marcar "Líneas de marcador" y presione "Marcar todo"
==> Todas las filas que desea mantener tienen un marcador
Vaya al menú "Buscar - Marcador - Marcador inverso"
==> Todas las líneas que desea eliminar están marcadas.
Vaya al menú "Buscar - Marcador - Eliminar líneas marcadas"
+1. Bien, no sabía 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
66
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 sin marcar". ¡Pero tu consejo me ayudó mucho! ¡Gracias!
aakoch
22
Puede omitir el paso 2, porque es posible (al menos desde v6.4.5) elegir "Eliminar líneas sin marcar".
Juliano
44
Estoy usando Notepad ++ durante tanto tiempo y nunca antes había sabido qué son los 'Marcadores'. Es sorprendente lo poderosa que es esa herramienta y lo poco que sé sobre ella.
Danubian Sailor
Eres un genio Este es solo otro ejemplo sorprendente de cómo conocer la herramienta que utiliza de verdad.
Marcello Grechi Lins
67
En realidad, esto se puede hacer en dos pasos a partir de 6.3. Creo que se puede hacer antes de eso, ya que tenía 5.9 cuando lo probé por primera vez.
Usando la publicación de Stema como base de esta respuesta. Hay un paso menos ahora. Marcar líneas y eliminar líneas sin marcar. Hecho. Instrucciones detalladas a continuación.
Menú de búsqueda "Buscar". En el cuadro de diálogo Buscar, haga clic en la pestaña "Marcar". Activar expresiones regulares. Busque ^<Path>( ^es para inicio de línea). No olvide marcar "Líneas de marcador" y presione "Marcar todo"
==> Todas las filas que desea mantener ahora tienen un marcador
Menú de búsqueda -> Marcador -> Eliminar líneas sin marcar.
Esto me llevó 10 segundos, mientras que la otra solución me llevó más de 20 segundos. ¡Gracias!
Negro
No necesitaba agregar el ^en mi término de búsqueda, ni usar expresiones regulares. Espero que esto ayude a alguien.
sa_leinad
29
Solución limpia de regex solamente
Variante de dos pasos
regex reemplazar
(?!^.*test.*$)^.+
reemplazar prueba con el texto solicitado
reemplazar
[\r\n]{2,}
con \r\n
Variante de un solo paso
Se usa ^(?!<Path>).*\r\npara 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:
(?!)Es una mirada negativa hacia arriba. ^.*test.*$ selecciona toda la línea que contiene el texto solicitado.
[\r\n]{2,}coincide con cualquiera \r\nque ocurra más de una vez que esta sea la nueva línea de Windows. Si tiene Linux u otro sistema operativo, es posible que deba meterse con esto. el segundo es reemplazarlo con una línea de retorno.
Nota para los pueblos: A veces, la expresión regular con final de línea (EOL) "no funciona". La \r\nEOL mencionada en la publicación es la que usa Windows y, por lo tanto, puede o no ser lo que está buscando. A menudo en entornos Linux es justo \n, o en entornos Mac solo \r, por lo que si extraes un archivo de cualquiera de ellos, no será EOL de estilo Windows. Sin embargo, si descarga a través de FileZilla y los activadores de modo ASCII, puede volver a cambiarlos a Windows EOL (como \nen \r\n). Entonces, si regex no funciona, verifique el estilo de EOL yendo a "Ver> Mostrar símbolos> Mostrar fin de línea". CR = \r. LF = \n.
dhaupin
5
Me parece que la forma más fácil es usar la función "Buscar todo en el documento actual" y luego copiar los resultados en un nuevo archivo o seleccionar todo y reemplazarlo en el actual.
Esto buscaría todas las líneas que contienen su texto y las enumeraría en la parte inferior. Simplemente haga clic derecho en el resultado de búsqueda y copie / pegue.
Siempre que realmente desee hacer coincidir <Path>y no una ruta del sistema de archivos, puede probar esto desde una línea de comandos utilizando Perl:
Es torpe, pero cópielo todo en Excel y luego use =IF(LEFT(A1,6)="<Path>",A1,"")y copie esa fórmula hasta el final. Luego copie de nuevo a Notepad ++. No es ideal, pero es bastante fácil (si tiene Excel). Advertencia: no funcionará bien con líneas sangradas (Excel desplazará las columnas, etc.).
Cuando hay varias maneras de manejar esta tarea directamente, ¿por qué querría copiar destructivamente en otra aplicación, procesarla allí y transferirla de regreso?
Baldrickk
1
No hay una manera fácil de hacer lo que quieres con Notepad ++. Deberá descargar un programa en su computadora o escribir algo en VB (supongo que está en Windows).
Puedes hacer lo que quieras de dos maneras con sed. La utilidad sed es una de las favoritas en * nix y se puede encontrar para Windows de las grandes personas en GnuWin ( http://gnuwin32.sourceforge.net/packages/sed.htm ). Descargaría este programa y luego ejecutaría su comando desde el símbolo del sistema.
Eliminar todas las líneas que no contengan: sed -i '/^<PATH>/!d' file
Imprima todas las líneas que contienen a un nuevo archivo: sed -n '/^<PATH>/p' file > newfile
Le sugiero que use imprimir las líneas que desea para un nuevo archivo. La razón de esto es que probablemente no obtendrá la declaración regex por primera vez. La utilidad sed utiliza la sintaxis básica de expresiones regulares (vea 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 comienzan con '/ var / www'. Si solicité 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 diagonal inversa \.
Esta puede ser una respuesta antigua, pero dado que realmente tiene 2 votos (-1 ahora de mí) quería comentar no solo qué tan equivocado es, sino reiterar en una operación de comando ÚNICO cómo acabo (nuevamente) de tomar una línea> 100k registre el archivo en las 34 líneas que contienen la palabra (o frase) en este caso simplemente "error" en menos de 3 segundos simplemente colocando esta expresión regular en el ENCONTRAR QUÉ: ^ (?!. *? error). * \ r \ n y dejar REPLACE WITH en blanco, y NO seleccione ". coincide con la nueva línea" y haga clic en "REPLACE ALL". Sí, también me encanta sed y awk, pero decir que NPP no puede hacer esto es simplemente falso.
¡Bienvenido a Super User! ¿Te importaría explicar esto a aquellos que tal vez no sepan qué hace cada parte de la expresión regular? :)
bertieb
0
Use Buscar-> Reemplazar e ingrese una expresión regular como ^[^ ].*y reemplace todo con una cadena vacía usando Regular expression. El siguiente paso es encontrar líneas vacías que busquen \n\nreemplazar con el \nuso Extendedvarias veces hasta 0 occurrences were found.(uso \r\n\r\ny \r\ndependiendo del formato de archivo). Si tiene muchas líneas vacías seguidas, es más rápido usar \n\n\n\n\n\n\no incluso más \n: s en la cadena de búsqueda.
Respuestas:
Hay una manera fácil de lograr esto. Necesitas realizar 3 pasos.
Vaya al menú Buscar> Buscar ...> Seleccione la pestaña "Marcar". Activar expresiones regulares. Busque
^<Path>
(^
es para inicio de línea). No olvide marcar "Líneas de marcador" y presione "Marcar todo"==> Todas las filas que desea mantener tienen un marcador
Vaya al menú "Buscar - Marcador - Marcador inverso"
==> Todas las líneas que desea eliminar están marcadas.
Vaya al menú "Buscar - Marcador - Eliminar líneas marcadas"
==> Todas las líneas marcadas se eliminan.
fuente
En realidad, esto se puede hacer en dos pasos a partir de 6.3. Creo que se puede hacer antes de eso, ya que tenía 5.9 cuando lo probé por primera vez.
Usando la publicación de Stema como base de esta respuesta. Hay un paso menos ahora. Marcar líneas y eliminar líneas sin marcar. Hecho. Instrucciones detalladas a continuación.
Menú de búsqueda "Buscar". En el cuadro de diálogo Buscar, haga clic en la pestaña "Marcar". Activar expresiones regulares. Busque
^<Path>
(^
es para inicio de línea). No olvide marcar "Líneas de marcador" y presione "Marcar todo"==> Todas las filas que desea mantener ahora tienen un marcador
Menú de búsqueda -> Marcador -> Eliminar líneas sin marcar.
==> Todas las líneas NO marcadas se eliminan.
fuente
^
en mi término de búsqueda, ni usar expresiones regulares. Espero que esto ayude a alguien.Solución limpia de regex solamente
Variante de dos pasos
regex reemplazar
reemplazar prueba con el texto solicitado
reemplazar
con
\r\n
Variante de un solo paso
Se usa
^(?!<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:
(?!)
Es una mirada negativa hacia arriba.^.*test.*$
selecciona toda la línea que contiene el texto solicitado.[\r\n]{2,}
coincide con cualquiera\r\n
que ocurra más de una vez que esta sea la nueva línea de Windows. Si tiene Linux u otro sistema operativo, es posible que deba meterse con esto. el segundo es reemplazarlo con una línea de retorno.fuente
\r\n
EOL mencionada en la publicación es la que usa Windows y, por lo tanto, puede o no ser lo que está buscando. A menudo en entornos Linux es justo\n
, o en entornos Mac solo\r
, por lo que si extraes un archivo de cualquiera de ellos, no será EOL de estilo Windows. Sin embargo, si descarga a través de FileZilla y los activadores de modo ASCII, puede volver a cambiarlos a Windows EOL (como\n
en\r\n
). Entonces, si regex no funciona, verifique el estilo de EOL yendo a "Ver> Mostrar símbolos> Mostrar fin de línea". CR =\r
. LF =\n
.Me parece que la forma más fácil es usar la función "Buscar todo en el documento actual" y luego copiar los resultados en un nuevo archivo o seleccionar todo y reemplazarlo en el actual.
Esto buscaría todas las líneas que contienen su texto y las enumeraría en la parte inferior. Simplemente haga clic derecho en el resultado de búsqueda y copie / pegue.
fuente
\tLine [\d]*:
. Sigue siendo una gran respuesta.Vaya al menú Buscar -> Buscar ... -> Activar expresiones regulares. Busque "^ Ruta " (^ es para 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 copiar / pegar 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 en blanco el campo "Reemplazar con:".
Haga clic en el botón "Reemplazar todo".
fuente
Siempre que realmente desee hacer coincidir
<Path>
y no una ruta del sistema de archivos, puede probar esto desde una línea de comandos utilizando Perl:Funcionó con Strawberry Perl en Windows, así que ajústelo en consecuencia si los resultados no son los esperados.
fuente
Es torpe, pero cópielo todo en Excel y luego use
=IF(LEFT(A1,6)="<Path>",A1,"")
y copie esa fórmula hasta el final. Luego copie de nuevo a Notepad ++. No es ideal, pero es bastante fácil (si tiene Excel). Advertencia: no funcionará bien con líneas sangradas (Excel desplazará las columnas, etc.).fuente
No hay una manera fácil de hacer lo que quieres con Notepad ++. Deberá descargar un programa en su computadora o escribir algo en VB (supongo que está en Windows).
Puedes hacer lo que quieras de dos maneras con sed. La utilidad sed es una de las favoritas en * nix y se puede encontrar para Windows de las grandes personas en GnuWin ( http://gnuwin32.sourceforge.net/packages/sed.htm ). Descargaría este programa y luego ejecutaría su comando desde el símbolo del sistema.
Eliminar todas las líneas que no contengan:
sed -i '/^<PATH>/!d' file
Imprima todas las líneas que contienen a un nuevo archivo:
sed -n '/^<PATH>/p' file > newfile
Le sugiero que use imprimir las líneas que desea para un nuevo archivo. La razón de esto es que probablemente no obtendrá la declaración regex por primera vez. La utilidad sed utiliza la sintaxis básica de expresiones regulares (vea 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 comienzan con '/ var / www'. Si solicité 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 diagonal inversa \.
fuente
Mejor solución con regex reemplazar:
Y reemplazar con nada
fuente
Use Buscar-> Reemplazar e ingrese una expresión regular como
^[^ ].*
y reemplace todo con una cadena vacía usandoRegular expression
. El siguiente paso es encontrar líneas vacías que busquen\n\n
reemplazar con el\n
usoExtended
varias veces hasta0 occurrences were found.
(uso\r\n\r\n
y\r\n
dependiendo del formato de archivo). Si tiene muchas líneas vacías seguidas, es más rápido usar\n\n\n\n\n\n\n
o incluso más\n
: s en la cadena de búsqueda.fuente