Editar: Essa resposta foi escrita e testada durante o uso do Notepad ++ versão 5.9.8 e funcionará para a versão atual do Notepad ++ (v 6.2) e para a maioria das versões anteriores. Depois que escrevi essa resposta, atualizei o Notepad ++ para a versão atual do 6.2 e descobri que agora a solução é muito mais fácil. Portanto, se você estiver usando o Notepad ++ versão 5.9.8 (ou versões anteriores) e não quiser atualizar para a versão atual do Notepad ++, essa resposta funcionará para você. Se você tiver atualizado para o Notepad ++ versão 6 ou posterior, veja minha outra resposta, que é muito mais simples.
Usando isso como o arquivo original:
This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
This is line 6
This is line 7
Etapa 1. Coloque uma tag exclusiva com " <title>
" e " </title>
" no início e no final de todas as linhas:
In "Regular Expression" Mode (F: is Find expression, R: is Replace expression):
F:^(.*)$
R:<##@@Begin@@##><title></title><##@@End@@##>
Resultados disso:
<##@@Begin@@##><title>This is line 1</title><##@@End@@##>
<##@@Begin@@##><title>This is line 2</title><##@@End@@##>
<##@@Begin@@##><title>This is line 3</title><##@@End@@##>
<##@@Begin@@##><title>This is line 4</title><##@@End@@##>
<##@@Begin@@##><title>This is line 5</title><##@@End@@##>
<##@@Begin@@##><title>This is line 6</title><##@@End@@##>
<##@@Begin@@##><title>This is line 7</title><##@@End@@##>
Etapa 2. Remova todas as "novas linhas" (\ r \ n):
In "Extended" mode:
F:\r\n
R:
Resultados disso (o arquivo inteiro está em uma única linha):
<##@@Begin@@##><title>This is line 1</title><##@@End@@##><##@@Begin@@##><title>This is line 2</title><##@@End@@##><##@@Begin@@##><title>This is line 3</title><##@@End@@##><##@@Begin@@##><title>This is line 4</title><##@@End@@##><##@@Begin@@##><title>This is line 5</title><##@@End@@##><##@@Begin@@##><title>This is line 6</title><##@@End@@##><##@@Begin@@##><title>This is line 7</title><##@@End@@##>
Etapa 3. Altere " <title>
" e " </title>
" para " <link>
" " </link>
" na segunda linha de cada duas linhas (linhas "pares"):
In "Regular Expression" Mode:
F:<##@@Begin@@##>(<title>.*?</title><##@@End@@##>)<##@@Begin@@##><title>(.*?)</title>(<##@@End@@##>)
R:<link></link>
Resultados disso (o arquivo inteiro ainda está em uma única linha):
<title>This is line 1</title><##@@End@@##><link>This is line 2</link><##@@End@@##><title>This is line 3</title><##@@End@@##><link>This is line 4</link><##@@End@@##><title>This is line 5</title><##@@End@@##><link>This is line 6</link><##@@End@@##><title>This is line 7</title><##@@End@@##>
Etapa 4. Substitua a tag "final" por "Newline" (\ r \ n):
In "Extended" mode:
F:<##@@End@@##>
R:\r\n
Resultados disso:
<title>This is line 1</title>
<link>This is line 2</link>
<title>This is line 3</title>
<link>This is line 4</link>
<title>This is line 5</title>
<link>This is line 6</link>
<title>This is line 7</title>
Então, 4 etapas. Nada mal se você precisar fazer isso apenas uma vez, ou apenas muito ocasionalmente.
A grande limitação do Notepad ++ é que você não pode combinar buscas / substituições "Estendido" e "Regex". Então, no modo "Extended", você pode procurar por "Newlines", mas não pode pesquisar usando "wildcards" (*.?), E no modo "Regex", você pode pesquisar usando "curingas", mas não pode procurar por " Novas linhas ".
Se você precisar fazer isso regularmente, seria muito mais fácil usar o Textpad ( link ), você pode fazer isso em dois passos (se houver a possibilidade de o arquivo ter um número "ímpar" de linhas "):
Passo 1. adicione " <title>
" " </title>
" a todas as linhas:
In "Regular Expression" Mode (F: is Find expression, R: is Replace expression):
F:^(.*)$
R:<title></title>
Etapa 2. Altere " <title>
" e " </title>
" para " <link>
" e " </link>
" na segunda linha de cada duas linhas (linhas "par"):
Still in "Regular Expression" Mode:
F:^(<title>.*</title>)\n<title>(.*)</title>
R:\n<link></link>
Com o Textpad, se você sabe que o arquivo sempre tem um número "par" se as linhas, você pode fazer a coisa toda de uma só vez:
In "Regular Expression" Mode:
F:^(.*)\n(.*)\n
R:<title></title>\n<link></link>\n
Você também pode fazer essa substituição facilmente com o awk.
Editar: aqui estão algumas informações e um exemplo de como fazê-lo com o awk ...
O awk é uma linguagem de programação com script criada para o unix, mas agora está disponível para o Windows e acredito também no Mac.
O principal uso do awk é processar (manipular e filtrar) a saída de texto e arquivos de texto. Por exemplo, para processar um arquivo "log" para imprimir campos e linhas específicos.
O Awk não possui uma interface de usuário. É um programa que normalmente é executado a partir do prompt da janela de comando, ou um "shell script" (unix) ou "arquivo de lote" (Windows).
Você diz ao awk o que fazer com o texto que está sendo processado, especificando comandos awk na linha de comando quando você executa o awk, ou criando um arquivo de script de comandos do awk.
No unix, é muito comum especificar todos os comandos awk na linha de comando e não em um arquivo de script awk. No Windows, é exatamente o oposto ... por causa da maneira como o awk usa aspas, parênteses e outras pontuações em seus comandos, scripts awk geralmente (talvez sempre) confundem o prompt de comando do Windows. Portanto, no Windows, é quase sempre melhor usar o awk colocando os comandos awk em um arquivo de script awk.
Aqui está um exemplo usando o awk como uma solução para a questão.
Primeiro, digamos que o texto que você quer manipular está em um arquivo chamado:
example.txt
Em seguida, crie um arquivo com o seguinte código. Você pode salvá-lo como:
oddeven.awk (ou o que você quiser).
{
if (NR % 2 == 1)
{
print "<title>"$0"</title>"
}
else
{
print "<link>"$0"</link>"
}
}
Como alternativa, você pode especificar esse script awk em uma única linha como esta:
{ if (NR % 2 == 1) {print "<title>" $0 "</title>"} else {print "<link>" $0 "</link>"} }
Os parâmetros da linha de comando awk que usaremos são:
-f "oddeven.awk" This is the name of the awk command script file.
"example.txt" This is the name of the text file you are reading (and manipulating).
"output.txt" This is the name of the file you are creating that will contain the modified text.
Então, a linha de comando que você usaria para chamar o awk é assim:
awk -f "oddeven.awk" "example.txt" > "output.txt"
Se esse processo de modificação do arquivo for uma coisa "única", usar o Notepad ++ ou outro editor de texto provavelmente será mais fácil do que aprender uma linguagem de script.
Mas, se você estiver fazendo esse mesmo processo várias vezes, ou se quiser automatizar o processo para que possa ser feito a partir de um shell script (unix) ou arquivo batch (Windows), então o awk é o caminho para vai.