Sublime: elimina todas las líneas que contienen un valor específico


116

Tengo un archivo de registro de 900 MB que puedo abrir en SublimeText 3. Este archivo está lleno de líneas similares a las siguientes.

10/08/2014 23:45:31:828,Information,,,,ExportManager: ,No records to send and/or not connected

¿Cómo puedo filtrar todas las líneas que contienen No records to send and/or not connected


Si bien las siguientes soluciones funcionan, este tipo de trabajo realmente debería hacerse con sed / awk para archivos grandes.
Bar

Respuestas:


229

Puede realizar una búsqueda y reemplazo de expresiones regulares:

Haga clic en Buscar> Reemplazar.

Asegúrese de que el botón Expresión regular esté presionado.

En el campo Buscar, escriba:

^.*No records to send and/or not connected.*\n

Deje el campo Reemplazar con vacío.

Haga clic en Reemplazar todo


16
El punto / punto completo al final es importante, sin él, no funcionará. Alternativamente, puede usar esto:^.*No records to send and/or not connected\S.*$
Navigatron

Esta solución es la única factible si está operando en un archivo grande. Mi máquina se atascó durante varios minutos cuando lo hice Ctrl+Shift+Kcon 200.000 líneas seleccionadas.
Przemek D

Voy a probar esto con mi archivo de 26 000 000 líneas: ')
YB Cause

64

Para las personas que no quieren escribir una expresión regular, puede seleccionar la cadena de búsqueda, presionar ctrl+cmd+go elegir "Búsqueda rápida todo" del menú, lo que le dará selecciones para cada cadena coincidente; desde allí Homemoverá cada cursor de selección al comienzo de la línea, shift+Endseleccionará cada línea coincidente y las del, delborrará todas.

¡La edición de varios cursores es divertida!


4
Este es un consejo más generalizado muy útil. Mi objetivo era eliminar todas las líneas que contienen una cadena. Terminé seleccionando una instancia y luego usé "QuickFind" con el atajo Ctrl+Cmd+Gcomo sugiere Leonid para seleccionar todas esas cadenas. Después de esto pude ir directamente a "Delete Line" Ctrl-Shift-Ky quirúrgicamente todas las líneas con esta cadena fueron eliminadas en un instante. Sublime Text es realmente el mejor editor de texto que he usado.
MiB

¿Es ctrl + cmd + g lo mismo que ctrl + alt + g en Windows? No pude hacer que esto funcione
panda negro

@black panda Para Windows, "Quick Find All" es alt + f3 - Gracias Leonid +1
Christopher

Si eres como yo y no tienes un botón de Inicio, también puedes usar CMD + <- (flecha izquierda)
Koray Tugay

4
También puede usar cmd + L para expandir la selección a la línea.
Koray Tugay

53

No pude hacer que la expresión regular funcione, así que utilicé el enfoque Alt-F3 de esta respuesta:

/superuser/452189/how-can-i-filter-a-file-for-lines-containing-a-string-in-sublime-text-2/598999#598999

  1. Seleccionar cadena de interés
  2. Presione Alt+ F3para pasar al modo de varios cursores en todas las ocurrencias ( Ctrl+ CMD+ Gen Mac OS X)
  3. Pulsa Ctrl+ L[ver comentarios] ( Cmd+ Len Mac)
  4. Copiar y pegar la selección en otro búfer
  5. Del

2
Dos cosas: (1) Puede vincular a una respuesta individual como esta (2) Debe resumir la otra respuesta aquí (y especializarse para responder esta pregunta según corresponda).
Compilador conspicuo

4
Puede reemplazar los pasos 3 y 4 con CTRL + L , que expande las selecciones a líneas completas, incluido el salto de línea.
Chnossos

2
Para aquellos como yo maldecidos por un esquema de clave MAC: Ctrl+Cmd+G para multi-cursor en todas las ocurrencias, Cmd+Lpara expandir líneas y el habitual copiar / pegar
Cyril Duchon-Doris

27

Esto es lo que encontré para los usuarios de Windows:

  1. Seleccione la cadena (se eliminarán todas las líneas que contengan esta cadena).
  2. Presione ALT + F3.
  3. Presione Ctrl + L.
  4. Presione Eliminar.

21

Ninguno de los códigos de expresiones regulares sugeridos anteriormente funcionó en mi caso, pero esto funcionó:

.*(text in question).*

Dejará líneas vacías en su código, ¿es eso lo que desea? De lo contrario, agregue \no $al final:.*(text in question).*\n
usuario

Si las líneas tienen una estructura como "abc / xyz / algo", para usar expresiones regulares, agregue '\'. Por ejemplo, si tenemos que buscar algo entre abc / y / algo, entonces la expresión será: abc /\.*.*\/ algo
Avik

Funciona para mí, si necesita múltiples coincidencias como yo, use |así:.*(a).*|.*(b).*|.*(c).*
bryc

0

Me encontré con un problema similar al editar un mapa del sitio

Esto funcionó para mí:

  1. Copie la última palabra de las líneas que desea eliminar
  2. Encuentra todos
  3. Presione eliminar para eliminar toda la línea

0

Las respuestas anteriores son las formas correctas, pero si desea deshacerse de las filas incluso con una sola cadena, hágalo, ^.*[a-zA-Z]+.*\nbusque -> Reemplazar -> coloque en la sección de búsqueda y mantenga el reemplazo con un espacio en blanco. Presione el botón Reemplazar todo, esto eliminará todas las filas que contengan incluso una sola cadena.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.