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?
Tenho um ficheiro de texto e quero manter linhas iniciadas com <Path>
, e apagar todas as outras linhas.
Como o posso fazer?
Há uma maneira fácil de o conseguir. Tem de executar 2 passos.
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”
Vá ao Menu “Pesquisar - Marcadores - Remover linhas não marcadas”.
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.
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”
Menu Pesquisar -> Bookmark -> Remove Unmarked Lines.
Limpar solução apenas regex
regex substituir
substituir
^(?!<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._(?!)
é uma consulta negativa. ^.*test.*$
selecciona a linha inteira que contém o texto pedido.
[\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.
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.
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”.
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.
É 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.).
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 \ .
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.