Eliminar filas duplicadas en Notepad ++

595

¿Es posible eliminar filas duplicadas en Notepad ++, dejando solo una sola aparición de una línea?

UGEEN
fuente

Respuestas:

760

Notepad ++ puede hacer esto, siempre que desee ordenar por línea y eliminar las líneas duplicadas al mismo tiempo.

Necesitará el complemento TextFX. Esto solía estar incluido en versiones anteriores de Notepad ++, pero si tiene una versión más nueva, puede agregarla desde el menú yendo a Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install. En algunos casos también se puede llamar TextFX Characters, pero esto es lo mismo

Las casillas de verificación y botones necesarios ahora aparecerá en el menú bajo: TextFX -> TextFX Tools.

Asegúrese de que "ordenar salidas solo únicas ..." esté marcado. Luego, seleccione un bloque de texto ( Ctrl+ Apara seleccionar todo el documento). Por último, haga clic en "ordenar líneas entre mayúsculas y minúsculas" o "ordenar líneas entre mayúsculas y minúsculas"

diseño de menú en n ++

Colin Pickard
fuente
32
Complemento increíblemente potente, a pesar de su "edad". Espero que NUNCA eliminen ese de la oferta estándar del complemento NPP. El tipo que pensó en todas las características de este complemento, fue una especie de "visionario".
GeertVc
77
Más poderoso que sobresalir.
Vasu
66
¿Qué pasa con la versión Notepad ++ x64? Plugin TextFX x64-version no existe
Geografía
15
TextFx no está en la versión de 64 bits.
Rhyous
44
@Geograph Y no habrá un complemento de 64 bits de TextFx, vea esta nota . Por lo tanto, sería bueno saber si hay un complemento alternativo que proporcione la eliminación de clasificación y duplicados.
Robert
641

Desde Notepad ++ Versión 6 puede usar esta expresión regular en el diálogo de búsqueda y reemplazo:

^(.*?)$\s+?^(?=.*^\1$)

y reemplazar con nada . Esto deja de todas las filas duplicadas la última aparición en el archivo.

¡No se necesita ordenar para eso y las filas duplicadas pueden estar en cualquier parte del archivo!

Debe marcar las opciones "Expresión regular" y ". Coincide con nueva línea":

Notepad ++ Reemplazar diálogo

  • ^ coincide con el inicio de la línea.

  • (.*?)coincide con cualquier carácter 0 o más veces, pero lo menos posible (coincide exactamente en la fila, esto es necesario debido a la opción ". coincide con la nueva línea"). La fila coincidente se almacena, debido a los corchetes alrededor y accesibles usando\1

  • $ coincide con el final de la línea.

  • \s+?^ esta parte coincide con todos los espacios en blanco (¡nuevas líneas!) hasta el comienzo de la siguiente fila ==> Esto elimina las nuevas líneas después de la fila coincidente, de modo que no haya una fila vacía después del reemplazo.

  • (?=.*^\1$)Esta es una afirmación positiva anticipada. Esta es la parte importante de esta expresión regular, una fila solo coincide (y se elimina), cuando hay exactamente la misma fila que sigue en otro lugar del archivo.

Stema
fuente
10
oh, este es brillante, incluso elimina filas vacías, lo estoy macroing en este mismo momento :)
Aprillion
66
Simplemente elimina TODAS las líneas de un archivo en algunos casos.
SerG
3
¿Hay alguna forma de eliminar la ÚLTIMA ocurrencia? Esto coincide con todos menos el último ...
Cullub
28
En mi caso, donde esta solución eliminó todas las líneas, desmarcó . matches newlinehizo el truco.
Kuitsi
3
@SerG En algunos casos no funcionó para mí también, pero cuando eliminé "coincide con la nueva línea" lo hizo :)
Davidenko
95

Si las filas están inmediatamente una detrás de la otra, puede usar un reemplazo de expresiones regulares:

Patrón de búsqueda: ^(.*\r?\n)(\1)+

Reemplazar con: \1

Grant Peters
fuente
1
Quizás otros hayan tenido suerte con esto, pero para mí ^ (. * \ N) \ 1 da como resultado "No puedo encontrar el texto"
b1nary.atr0phy
44
@ b1naryatr0phy asegúrese de tener "Modo de búsqueda" establecido en "Expresión regular", también actualicé el patrón para que pueda manejar las terminaciones de línea de estilo de Windows
Grant Peters
3
notepad ++ tiene un motor regex ligero, no permite funciones avanzadas, ni siquiera el "? o \ r \ n", ya que solo funciona en una sola línea y usa $ para los caracteres \ r \ n
Stefan Rogin
3
Esto elimina uno por uno. Debes repetirlo muchas veces. Me pregunto por qué \ n + -> \ n no funciona (pensé que informa muchos reemplazos)
Val
2
@Val, si convierte la parte de referencia de la coincidencia en un grupo con 1 o más coincidencias requeridas, el patrón coincidirá con N líneas duplicadas contiguas a la vez:^(.*\r?\n)(\1)+
Kenigmatic
37

Notepad ++

-> Reemplazar ventana

Asegúrese de que en el modo de búsqueda haya seleccionado el botón de opción Expresión regular

Encontrar que:

^ (. *) (\ r? \ n \ 1) + $

Reemplazar con:

$ 1

Antes de:

y pensamos que hay

y pensamos que hay

linea sola

Es posible que

Es posible que

Después:

y pensamos que hay

linea sola

Es posible que

blueberry0xff
fuente
2
¿No es necesario ordenar el archivo para que esto funcione?
Peter Mortensen el
esto es brillante
Remo Liechti
30

Si no le importa el orden de las filas (lo cual no creo que haga), puede usar un cuadro de Linux / FreeBSD / Mac OS X / Cygwin y hacer:

$ cat yourfile | sort | uniq > yourfile_nodups

Luego abra el archivo nuevamente en Notepad ++.

Pablo Santa Cruz
fuente
3
No funciona en Windows 7.'cat' is not recognized as an internal or external command, operable program or batch file.
Iain Samuel McLean Elder
2
@Iain Elder: cat es una utilidad estándar de Unix, por lo que esta respuesta especifica que funciona en Linux, FreeBSD y MacOSX. La respuesta también sugiere Cygwyn: este es un programa de Windows que le brinda un shell de estilo Unix y, con él, cat. Larga historia corta (¡demasiado tarde!): Win 7 necesita que Cygwin haga esto.
Travis Clark
11
En Windows tienes PowerShell:cat yourfile | sort -Unique
Elazar
99
Estos son buenos ejemplos del "uso gratuito del gato". Olvídate de la utilidad cat y simplemente usa la redirección de archivos de esta manera: sort <yourfile | uniq> yourfile_nodups
scott8035
1
@ scott8035, estoy de acuerdo en que cat no sirve para ejecutar ese comando, pero a menudo me resulta útil comenzar con cat cuando descubro una secuencia larga de comandos no obvios, como el archivo cat | sed ... | sed ... | sed ... y así sucesivamente. Entonces diría que puede haber razones para usar cat. Por supuesto, el gato se puede quitar al final, pero algunos son demasiado vagos para eso.
FORTRAN
17

Las últimas versiones de Notepad ++ aparentemente no incluyen el complemento TextFX en absoluto. Para usar el complemento para ordenar / eliminar duplicados, el complemento debe descargarse e instalarse (más involucrado) o agregarse usando el administrador de complementos.

A) Manera fácil (como se describe aquí ).

Complementos -> Administrador de complementos -> Mostrar administrador de complementos -> pestaña Disponible -> Caracteres TextFX -> Instalar

B) De manera más complicada, si se necesita otra versión o la forma fácil no funciona.

  1. Descargue el complemento de SourceForge:

    http://downloads.sourceforge.net/project/npp-plugins/TextFX/TextFX%20v0.26/TextFX.v0.26.unicode.bin.zip

  2. Abra el archivo zip y extraiga NppTextFX.dll

  3. Coloque NppTextFX.dll en el directorio de complementos de Notepad ++, como:
    C: \ Archivos de programa \ Notepad ++ \ plugins

  4. Inicie Notepad ++, y TextFX será uno de los elementos del menú de archivos (como se ve en la Respuesta # 1 anterior por Colin Pickard)

Después de instalar el complemento TextFX, siga las instrucciones en la Respuesta # 1 para ordenar y eliminar duplicados.

Además, considere configurar un método abreviado de teclado usando Configuración> Asignador de accesos directos si usa este comando con frecuencia o si desea replicar un método abreviado de teclado, como F9 en TextPad para ordenar.

cada vez
fuente
En notepad ++ 7.6, se debe agregar el complemento C:\Users\<your_user>\AppData\Local\Notepad++\plugins\NppTextFX. Aparte de eso, esto todavía funciona bien.
P_W999
14

En la versión 7.8, puede lograr esto sin ningún complemento: Edición -> Operaciones de línea -> Eliminar líneas duplicadas consecutivas. Tendrá que ordenar el archivo para colocar líneas duplicadas en orden consecutivo antes de que esto funcione, pero funciona de maravilla.

Las opciones de clasificación están disponibles en Edición -> Operaciones de línea -> Ordenar por ...

Dr. Nixon
fuente
7

Es posible que necesite un complemento para hacer esto. Puede probar la línea de comando cc.ddl(eliminar líneas duplicadas) de ConyEdit . Es un complemento de editor cruzado para los editores de texto, incluido Notepad ++.

Con ConyEdit ejecutándose en segundo plano, siga los pasos a continuación:

  1. ingrese la línea de comando cc.ddl al final del texto.
  2. copia el texto y la línea de comando.
  3. pegar, entonces verás lo que quieres.

Ejemplo
ingrese la descripción de la imagen aquí

Donald
fuente
5

Busque la expresión regular: \b(\w+)\b([\w\W]*)\b\1\b

Reemplácelo con: $1$2

Presione el botón Reemplazar hasta que no haya más coincidencias para la expresión regular en su archivo.

Hesham Eraqi
fuente
Creó un archivo de prueba para probar esto, pero la expresión regular no funcionó de manera confiable para hacer el trabajo.
RockPaperLizard
¿Podría dar un ejemplo que falla para que pueda mejorar mi respuesta?
Hesham Eraqi
4

Ninguno funcionó para mí.

Una solución es:

Reemplazar

^(.*)\s+(\r?\n\1\s+)+$

con

\1
Manohar Reddy Poreddy
fuente
Creó un archivo de prueba para probar esto, pero la expresión regular no funcionó de manera confiable para hacer el trabajo.
RockPaperLizard
Para todos mis datos, funcionó bien. Olvidé cuál era mi solución. Agregue más detalles donde falló para que otras personas puedan mejorar esta expresión regular.
Manohar Reddy Poreddy
Creé un archivo para que cada línea tuviera un número entero entre 0-999, en orden aleatorio, a veces con duplicados. No eliminó la mayoría de los duplicados, y no eliminó ningún duplicado que no fuera secuencial.
RockPaperLizard
1
Proporcione 2 ejemplos para los que funcionan y los que no funcionan. Ayudará a alguien.
Manohar Reddy Poreddy
1
¿Por qué ^(.*)\s+(\r?\n\1\s+)+$no ^(.*)\s*(\r?\n\1\s*)+$?
Mark Ch
2

El administrador de complementos no está disponible actualmente (no viene con la distribución) para Notepad ++. Debe instalarlo manualmente ( https://github.com/bruderstein/nppPluginManager/releases ) e incluso si lo hace, muchos de los complementos ya no están disponibles (sin TextFX).

Tal vez hay otro complemento que contiene la funcionalidad requerida. Aparte de eso, la única forma de hacerlo en Notepad ++ es usar una expresión regular especial para hacer coincidir y luego reemplazar ( Ctrl+ FReemplazar pestaña).

Aunque hay muchas funcionalidades disponibles a través del elemento del menú Editar (recortar, eliminar líneas vacías, ordenar, convertir EOL) no hay una operación "única" disponible.

Si tiene Windows 10, puede habilitar Bash (simplemente escriba Ubuntu en Microsoft Store y siga las instrucciones en la descripción para instalarlo) y utilícelo cat your_file.txt | sort | uniq > your_file_edited.txt. Por supuesto, debe estar en el mismo directorio de trabajo que "your_file.txt" o consultarlo a través de su ruta.

Patronauta
fuente