Adicione texto ao início de todas as outras linhas no Notepad++

Adicione texto ao início de todas as outras linhas no Notepad++

O que eu quero fazer é:

  • Adicione <title>ao início das linhas 1, 3, 5, etc...(centenas de linhas em um arquivo notepad++)
  • Adicione </title>ao final das linhas 1, 3, 5, etc...

Então:

  • Adicione <link>ao início das linhas pares (por exemplo, linhas 2, 4, 6, 8, etc...)
  • Adicione </link>ao final das linhas pares (por exemplo, linhas 2, 4, 6, 8, etc...)

Responder1

Pessoalmente, acho que seria muito mais fácil fazer isso escrevendo um script perl/python simples, mas aqui está uma maneira de fazer isso no Notepad++. Eu tentei com alguns dados de amostra e funcionou como você queria.

  • Abra o arquivo que deseja editar
  • Vá para o início da primeira linha do arquivo
  • Clique na opção Macro -> Iniciar Gravação no menu
  • Inserir (título), pressione o botão final para ir ao final da linha, inserir (/título)
  • pressione o botão home e vá para o início da linha
  • pressione o botão para baixo para ir para a linha 2
  • Inserir (link), pressione o botão final para ir até o final da linha, inserir (/link)
  • pressione o botão home e vá para o início da linha
  • pressione o botão para baixo para ir para a linha 3
  • Clique na opção Macro -> Parar Gravação no menu

Agora você pode repetir a macro quantas vezes quiser e ela repetirá/enxaguará as ações.

Responder2

Talvez você possa abordar isso de uma maneira diferente das "linhas alternativas" (que seriam realmente melhor atendidas usando uma linguagem de script).

Supondo que as linhas que você deseja incluir "link" contenham algo que as identifique como um link, você pode substituir essas linhas primeiro e, em seguida, assumir que as linhas restantes devem ser títulos. Digamos que suas linhas de link contenham "http":

  1. Control-Hpara abrir a caixa de diálogo de substituição
  2. Insira (http.*)como critério de pesquisa (encontre qualquer linha httpnela e armazene na variável\1
  3. Insira (link)\1(/link)como critério de substituição - substitua o que foi encontrado na etapa anterior por ele mesmo contido nas tags do link
  4. Substitua tudo - agora todas as linhas do seu link estão incluídas, todas as linhas restantes devem ser títulos

  1. Insira ^([^(\(link\))]*)$como critério de pesquisa (encontre qualquer linha que não contenha(link)
  2. Insira (title)\1(/title)como critério de substituição
  3. Substitua tudo

Isso incluirá as linhas restantes com tags de título.

Responder3

Editar:Esta resposta foi escrita e testada ao usar o 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 de escrever esta resposta, atualizei o Notepad++ para a versão atual 6.2 e descobri que a solução agora é 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++, esta resposta funcionará para você. Se você atualizou 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

Passo 1. Coloque uma tag Unique 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>\1</title><##@@End@@##>

Resultados nisso:

<##@@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@@##>

Passo 2. Remova todas as "novas linhas" (\r\n):

In "Extended" mode:
    F:\r\n
    R:

O resultado é isto (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:\1<link>\2</link>\3

O resultado é isto (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@@##>

Passo 4. Substitua a tag “end” por uma “Newline” (\r\n):

In "Extended" mode:
    F:<##@@End@@##>
    R:\r\n

Resultados nisso:

<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 passos. Nada mal se você precisar fazer isso apenas uma vez ou apenas ocasionalmente.

A grande limitação do Notepad ++ é que você não pode combinar pesquisas/substituições "Extended" e "Regex". Portanto, no modo "Estendido", você pode pesquisar por "Novas linhas", mas não pode pesquisar usando "curingas" (*.?), e no modo "Regex", você pode pesquisar usando "curingas", mas não pode pesquisar por " Novas linhas".

Se você precisar fazer isso regularmente, seria muito mais fácil usar o Textpad (http://textpad.com), você pode fazer isso em duas etapas (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>\1</title>

Passo 2. Altere " <title>" e " </title>" para " <link>" e " </link>" na segunda linha de cada duas linhas (linhas "pares"):

Still in "Regular Expression" Mode:  
    F:^(<title>.*</title>)\n<title>(.*)</title>
    R:\1\n<link>\2</link>

Com o Textpad, se você sabe que o arquivo sempre tem um número "par" nas linhas, você pode fazer tudo de uma só vez:

In "Regular Expression" Mode:  
    F:^(.*)\n(.*)\n
    R:<title>\1</title>\n<link>\2</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 fazer isso com o awk ...

Awk é uma linguagem de programação com script que foi criada para Unix, mas agora está disponível para Windows e acredito que também para Mac.

O principal uso do awk é processar (manipular e filtrar) saída de texto e arquivos de texto. Por exemplo, para processar um arquivo de "log" para imprimir campos e linhas específicos.

Awk não possui uma interface de usuário. É um programa que normalmente é executado a partir do prompt da janela de comando ou de um "shell script" (unix) ou "arquivo em lote" (Windows).

Você diz ao awk o que fazer com o texto que está sendo processado especificando comandos do awk na linha de comando ao executar o awk ou criando um arquivo de script de comando do awk.

No Unix, é muito comum especificar todos os comandos do awk na linha de comando e não em um arquivo de script do awk. No Windows é exatamente o oposto... devido à forma como o awk usa aspas, parênteses e outras pontuações em seus comandos, os scripts do awk geralmente (talvez sempre) confundem o prompt de comando do Windows. Portanto, no Windows é quase sempre melhor usar o awk colocando os comandos do awk em um arquivo de script do awk.

Aqui está um exemplo usando o awk como solução para a questão.

Primeiro, digamos que o texto que você deseja manipular esteja 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 desejar).

{
    if (NR % 2 == 1)
    {
        print "<title>"$0"</title>"
    }
    else
    {
        print "<link>"$0"</link>"
    }
}

Alternativamente, você pode especificar este script awk em uma única linha como esta:

{ if (NR % 2 == 1) {print "<title>" $0 "</title>"} else {print "<link>" $0 "</link>"} }

Os parâmetros de linha de comando do 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 algo "único", 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 repetidamente, ou se quiser automatizar o processo para que possa ser feito a partir de um script de shell (unix) ou arquivo em lote (Windows), então awk é o caminho a percorrer.

Responder4

Eu sei que esta não é uma resposta definitiva, mas pode levá-lo na direção certa. Se você der uma olhadaesse sitemostra como usar a função de substituição no modo regex para inserir coisas no início e no final das linhas.

EG Encontre o que: ^(.+)$ Substitua por: title\1/title

Agora isso irá editar todas as linhas, mas isso é meio caminho andado.

informação relacionada