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

energ1ser
fuente
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

Jonathan Aquino
fuente
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!

Leonid Shevtsov
fuente
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
denfromufa
fuente
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.
Prashant Goel
fuente
21

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

.*(text in question).*
Magnus
fuente
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
Pete Varley
fuente
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.

shubham mishra
fuente