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

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

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

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

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

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

Shubham Mishra
fonte