Regex: remova linhas contendo "ajuda", etc.

372

Eu tenho um longo documento de comandos. Usando o Notepad ++ ou o regex, desejo excluir todas as linhas que contenham "ajuda", incluindo keyboard_help, etc.

Como isso pode ser feito?

limão
fonte

Respostas:

946

Isso também é possível com o Notepad ++:

  • Vá para o menu de pesquisa, Ctrl+ Fe abra a guia Marcar .
  • Marque a linha do marcador (se não houver atualização da guia Marcar para a versão atual).

  • Digite seu termo de pesquisa e clique em Marcar Tudo

    • Todas as linhas que contêm o termo de pesquisa estão marcadas.
  • Agora vá ao menu PesquisarFavoritosRemover linhas marcadas

  • Feito.

stema
fonte
36
sim! Ele também possui 'Remove Unmarked Lines', que é como grep, exatamente o que eu precisava!
Chloe
6
Obrigado, este é um truque legal. Prefiro fazê-lo com apenas alguns cliques do que iniciar um console Unix (ignorando o fato de eu estar principalmente no Windows), cdentrar no caminho e digitar um comando complexo (se preocupar com sintaxe e estragar permanentemente e depois perceber não há backup). [ Não me interpretem mal, eu uso os comandos do console o tempo todo para outras coisas, mas para algo assim, é apenas um exagero.] #
ADTC
2
Apenas me salvou um monte de tempo :-)
Brlja
3
a verificação BOOKMARK LINEé importante aqui, caso contrário não funcionará !.
HaSeeB MiR 13/03/2019
11
@AndrewSchultz, desculpe, mas não.
stema
187

Outra maneira de fazer isso no Notepad ++ é na caixa de diálogo Localizar / substituir e com regex:

  • Ctrl+ hpara exibir a caixa de diálogo Localizar Substituição.

  • Na Find what:caixa de texto, inclua seu regex: .*help.*\r?\n(onde \ré opcional caso o arquivo não tenha terminações de linha do Windows).

  • Deixe a Replace with:caixa de texto em branco.

  • Verifique se o botão de opção Expressão regular na área Modo de pesquisa está selecionado. Então clique Replace Alle pronto! Todas as linhas que contêm seu termo de pesquisa helpforam removidas.

Como substituir linha em N ++

OozeMeister
fonte
17
resposta melhor do que usar guia marca, uma vez que este pode ser feito para "Localizar em arquivos"
Alex
2
Evite caracteres especiais, como parênteses, com uma barra invertida.
Noumenon
4
desmarque a opção ". corresponde à nova linha"
MagTun 31/03
11
Melhor resposta devido a um desempenho superior. Com arquivos de> 1 milhão de linhas, o método de marcador é esticado ao máximo, também em máquinas modernas.
Roland Ettinger
18

Tarefa fácil com grep:

grep -v help filename

Anexe > newFileNamepara redirecionar a saída para um novo arquivo.


Atualizar

Para esclarecer, o comportamento normal será imprimir as linhas na tela. Para canalizá-lo para um arquivo, o >pode ser usado. Assim, neste comando:

grep -v help filename > newFileName
  1. grepchama o grepprograma, obviamente
  2. -vé um sinalizador para inverter a saída. Por padrão, grepimprime as linhas que correspondem ao padrão especificado. Com esse sinalizador, ele imprimirá as linhas que não correspondem ao padrão.
  3. help é o padrão a combinar
  4. filename é o nome do arquivo de entrada
  5. > redireciona a saída para o seguinte item
  6. newFileName o novo arquivo onde a saída será salva.

Como você deve ter notado, você não estará excluindo itens no seu arquivo. grepirá lê-lo e outro arquivo será salvo, modificado de acordo.

sidyll
fonte
@ Kevin Duke: Ai! Isso provavelmente significa que você não tem grepinstalado. De qualquer forma, eu recomendo que você instale o GNU grep, ele certamente funcionará no Windows e é uma ferramenta realmente útil.
Sidyll
@sidyll ele sabia o grep foi e ele fez um monte de saída, que poderia ter sido porque eu não especificar um arquivo de saída
limão
2
@ Kevin Duke: como eu disse anteriormente na resposta, a saída pode ser redirecionada. O comportamento padrão é impresso na tela. Para redirecionar, você usa um pipe ( >neste caso), fornecendo um comando final degrep -v help filename > outputFileName
sidyll
Obrigado, vou definitivamente tentar isso!
lemon
grep> sed qualquer dia da semana para encontrar sequências de caracteres
kwikness
13

Você pode fazer isso usando o sed: sed '/help/ d' < inputFile > outputFile

Tikhon Jelvis
fonte
4
@CengizFrostclaw: Na linha de comando no Linux / Mac / Whatever. Se você estiver no Windows, precisará instalar algo como o CygWin e usá-lo.
Tikhon Jelvis
Obrigado @TikhonJelvis! E uma pergunta final, podemos fazer sed 'help /' para excluir todas as linhas iniciando (sem conter) com ajuda?
21414 jeff
3
@CengizFrostclaw: Eu acho que sed '/^help/ d'deveria funcionar. O ^representa o início da linha.
Tikhon Jelvis
@jeff PowerShell tem sedegrep
Ooker 31/10
O cygwin pode não funcionar no Windows com arquivos utf-16. Os utilitários Cygwin usam o UFT-8 por padrão. Muito poucos deles suportam UTF-16. Use babun babun.github.io . Ele atua como um invólucro em torno do cygwin, mas fornece muitas coisas prontas para uso.
Sahil Singh
9

Procure com uma expressão regular:

^.*(help).*$
Rob Rob
fonte
2
E a parte de exclusão?
Peter Mortensen
11
@PeterMortensen Localizar \n\n, substitua por `` (nothing)
Leo
6

Se você estiver no Windows , tente findstr. Não são necessárias ferramentas de terceiros:

findstr /V /L "searchstring" inputfile.txt > outputfile.txt

Ele também suporta regex! Basta ler a ajuda da ferramenta findstr /?.

PS Se você deseja trabalhar com arquivos grandes e enormes (como arquivos de log de 400 MB), um editor de texto não economiza muito em memória; portanto, como alguém já apontou, as ferramentas de linha de comando são o caminho a seguir. Mas não há grep no Windows, então ...

Acabei de executar isso em um arquivo de log de 1 GB e levou literalmente 3 segundos.

Alex
fonte