2011-05-29 15:05:02 +0000 2011-05-29 15:05:02 +0000
221
221

Apagar todas as linhas do Notepad++ excepto as que contêm uma palavra de que preciso?

Tenho um ficheiro de texto e quero manter linhas iniciadas com <Path>, e apagar todas as outras linhas.

Como o posso fazer?

Respostas (10)

315
315
315
2011-06-03 20:23:06 +0000

Há uma maneira fácil de o conseguir. Tem de executar 2 passos.

  1. Vá ao menu Pesquisar > Encontrar… > Seleccione o separador “Marcar”. Activar as expressões regulares. Procure por ^<Path> (^ é para início de linha). Não se esqueça de marcar “Bookmark lines” e prima “Mark All”

  2. Vá ao Menu “Pesquisar - Marcadores - Remover linhas não marcadas”.

67
67
67
2013-02-27 16:03:51 +0000

Isto pode efectivamente ser feito em duas etapas a partir de 6.3. Penso que pode ser feito mais cedo do que isso, pois tinha 5,9 quando o experimentei pela primeira vez.

Usando o posto da Stema como base desta resposta. Agora há menos um passo. Marcar linhas e remover linhas não marcadas. Feito. Seguem-se instruções detalhadas.

  1. Pesquisar no menu “Procurar”. No diálogo Procurar, clique no separador “Marcar”. Activar as expressões regulares. Pesquisar por ^<Path> (^ é para iniciar a linha). Não se esqueça de marcar “Bookmark lines” e prima “Mark All”

  2. Menu Pesquisar -> Bookmark -> Remove Unmarked Lines.

30
30
30
2013-07-08 16:51:09 +0000

Limpar solução apenas regex

Duas variantes de passos

  1. regex substituir

  2. substituir

Variante de passo único

Utilizar ^(?!<Path>).*\r\n para substituir fósforos por cadeia vazia. A versão generalizada seria ^(?!.*?test).*\r\n. Isto não removerá a linha vazia no final do ficheiro. Todas as outras linhas são removidas, incluindo múltiplas linhas vazias consecutivas._

Explicação:

  1. (?!) é uma consulta negativa. ^.*test.*$ selecciona a linha inteira que contém o texto pedido.

  2. [\r\n]{2,} corresponde a qualquer \r\n que ocorra mais do que uma vez que esta é a linha Nova do Windows. se tiver Linux ou outro sistema operativo poderá ter de mexer nisto. a segunda é substituí-la por uma linha de retorno.

5
5
5
2015-12-17 11:43:30 +0000

Parece-me que a forma mais fácil é usar apenas a funcionalidade “Find All in Current Document” e depois copiar os resultados para um novo ficheiro ou seleccionar tudo e substituir no actual.

Isto iria encontrar todas as linhas que contêm o seu texto e listá-las no fundo. Basta clicar com o botão direito do rato no resultado da pesquisa e copiar / colar.

4
4
4
2013-06-21 16:36:49 +0000

Vá ao menu Procurar -> Localizar… -> Activar expressões regulares. Pesquisar por “^Caminho” (^ é para início de linha).

Clique no botão “Encontrar tudo no documento actual”.

A janela “Encontrar resultado” irá aparecer com todas as linhas do padrão. Seleccione copiar/colar num novo separador no Notepad++.

Neste novo separador, vá a: menu Search -> Replace… -> Activa as expressões regulares.

No campo “Find what:”, use o padrão: “Linha \d+: ”. Deixe o campo “Substituir por:” em branco.

Clique no botão “Substituir tudo”.

3
3
3
2011-05-30 01:02:36 +0000

Desde que queira realmente combinar <Path> e não um caminho de sistema de ficheiros, pode tentar isto a partir de uma linha de comando usando Perl:

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

Funcionou com o Strawberry Perl no Windows, por isso ajuste em conformidade se os resultados não forem os esperados.

3
3
3
2011-05-29 18:07:54 +0000

É desajeitado, mas copie tudo para Excel , e depois use =IF(LEFT(A1,6)="<Path>",A1,"") e copie essa fórmula até ao fim. Depois copie isso de volta para o Notepad++. Não é o ideal, mas é bastante fácil (se tiver o Excel). Atenção: Não funcionará bem com linhas indentadas (o Excel deslocará as colunas, etc.).

2
2
2
2011-05-30 03:00:09 +0000

Não há uma maneira fácil de fazer o que você quer com o Notepad++. Terá de descarregar um programa para o seu computador ou escrever algo em VB (presumo que esteja no Windows).

Pode fazer o que quiser de duas formas com sed. O utilitário sed é um dos favoritos no *nix e pode ser encontrado para Windows no GnuWin http://gnuwin32.sourceforge.net/packages/sed.htm ). Pode descarregar este programa, e depois executar o seu comando a partir do prompt de comando.

Apagar todas as linhas que não contenham : sed -i '/^<PATH>/!d' file

Imprimir todas as linhas que contenham para um novo ficheiro: sed -n '/^<PATH>/p' file > newfile

Sugiro que use imprimir as linhas que pretende para um novo ficheiro. A razão para isto é que provavelmente não vai receber a declaração regex pela primeira vez. O utilitário sed usa a Sintaxe Básica de Expressão Regular (veja a referência em http://www.regular-expressions.info/reference.html ). Se é algo como um caminho *nix (/var/wwww) então você precisará escapar do caracter / para o seu regex funcionar.

Exemplo: sed -n '/^\/var\/www/p' file > newfile Isto irá imprimir todas as linhas que começam com ‘/var/wwww’. Se eu arquivei para escapar ao / caractere, então o comando teria lançado um erro. Você pode escapar de um caractere especial (como /) com o caractere de contrabarra \ .

1
1
1
2018-05-01 14:37:57 +0000

Melhor solução com regex substituir:

(?!^.*SOMETEXT.*$)^.+\r?\n

E substituir por nada

0
0
0
2011-05-29 15:16:28 +0000

Use Search->Substitua e introduza uma expressão regular como ^[^].* e substitua tudo por uma cadeia vazia usando Regular expression. O próximo passo é encontrar linhas vazias procurando por \n\n substituindo por \n usando Extended várias vezes até 0 occurrences were found. (use \r\n\r\n e \r\n dependendo do formato do ficheiro). Se tiver muitas linhas vazias numa linha, é mais rápido usar \n\n\n\n\n\n\n ou até mais \n:s na cadeia de pesquisa.