Sublime - exclui todas as linhas contendo um valor específico


116

Eu tenho um arquivo de log de 900 MB que posso abrir no SublimeText 3. Este arquivo está cheio de linhas semelhantes às seguintes.

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

Como posso filtrar todas as linhas que contêm No records to send and/or not connected


Embora as soluções abaixo funcionem, esse tipo de trabalho deve realmente ser feito com sed / awk para arquivos grandes.
Bar

Respostas:


229

Você pode fazer uma pesquisa e substituição de expressão regular:

Clique em Localizar> Substituir.

Certifique-se de que o botão Expressão regular está pressionado.

Para o campo Find What, coloque:

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

Deixe o campo Substituir por vazio.

Clique em Substituir Tudo


16
O ponto final / ponto final é importante, sem ele não funciona. Como alternativa, você pode usar isto:^.*No records to send and/or not connected\S.*$
Navigatron de

Essa solução é a única viável se você estiver operando com um arquivo grande. Minha máquina travou por vários minutos quando o fiz Ctrl+Shift+Kcom 200.000 linhas selecionadas.
Przemek D

Vou tentar isso com meu arquivo de 26.000.000 linhas: ')
YB Causa

64

Para as pessoas que não querem escrever um regex - você pode apenas selecionar a string de pesquisa, clicar ctrl+cmd+gou escolher "Quick Find All" no menu, que lhe dará as seleções para cada string correspondente; a partir daí, Homeirá mover cada cursor de seleção para o início da linha, shift+Endirá selecionar todas as linhas correspondentes e del, delirá apagar todas elas.

A edição de vários cursores é divertida!


4
Esta é uma dica mais generalizada muito útil. Meu objetivo era deletar todas as linhas contendo uma string. Acabei selecionando uma instância dele e, em seguida, usei "QuickFind" com o atalho, Ctrl+Cmd+Gcomo sugere Leonid para selecionar todas essas strings. Depois disso, eu poderia ir diretamente para "Excluir linha" Ctrl-Shift-Ke cirurgicamente todas as linhas com esta corda foram removidas em um instante. Sublime Text é realmente o melhor editor de texto que já usei.
MiB

Ctrl + cmd + g é o mesmo que ctrl + alt + g no Windows? Não consegui fazer isso funcionar
panda preto

@black panda Para windows "Quick Find All" is alt + f3 - Obrigado Leonid +1
Christopher

Se você for como eu e não tiver um botão Home, também pode usar CMD + <- (seta para a esquerda)
Koray Tugay

4
Você também pode usar cmd + L para expandir a seleção para a linha.
Koray Tugay

53

Não consegui fazer o regex funcionar, então usei a abordagem Alt-F3 a partir desta resposta:

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

  1. Selecione a sequência de interesse
  2. Pressione Alt+ F3para entrar no modo multi-cursor em todas as ocorrências ( Ctrl+ CMD+ Gno Mac OS X)
  3. Pressione Ctrl+ L[ver comentários] ( Cmd+ Lno Mac)
  4. Copiar e colar a seleção para outro buffer
  5. Del

2
Duas coisas: (1) Você pode criar um link para uma resposta individual como esta (2) Você deve resumir a outra resposta aqui (e especializá-la para responder a essa pergunta conforme apropriado).
Conspicuous Compiler

4
Você pode substituir as etapas 3 e 4 por CTRL + L, o que expande as seleções para linhas inteiras, incluindo quebra de linha.
Chnossos de

2
Para aqueles como eu amaldiçoados por um esquema de chave MAC: Ctrl+Cmd+Gpara multi-cursor em todas as ocorrências, Cmd+Lpara expandir linhas e o copiar / colar usual
Cyril Duchon-Doris

27

Isto é o que encontrei para os usuários do Windows:

  1. Selecione a string (cada linha que contém esta string deve ser removida).
  2. Pressione ALT + F3.
  3. Pressione Ctrl + L.
  4. Pressione Excluir.

21

Nenhum dos códigos regex sugeridos acima funcionou no meu caso, mas funcionou:

.*(text in question).*

Vai deixar linhas vazias no seu código, é isso que você quer? Caso contrário, adicione \nou $no final:.*(text in question).*\n
usuário

Se as linhas tiverem "abc / xyz / something" como estrutura, para usar regex adicione '\'. Por exemplo, se tivermos que pesquisar algo entre abc / e / alguma coisa, a expressão será: abc /\.*.*\/ alguma coisa
Avik

Funciona para mim, se você precisar de várias correspondências como eu, use |assim:.*(a).*|.*(b).*|.*(c).*
bryc

0

Eu tive um problema semelhante ao editar um mapa do site

Isso funcionou para mim:

  1. Copie a última palavra nas linhas que deseja apagar
  2. Encontrar tudo
  3. Pressione delete para deletar toda a linha

0

As respostas acima são as maneiras corretas, mas se você quiser se livrar das linhas mesmo com uma única string, faça, Find -> Replace -> put ^.*[a-zA-Z]+.*\nNa seção find e mantenha substitua com em branco. Aperte o botão substituir tudo para excluir todas as linhas com até mesmo uma única string.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.