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

1

O que eu quero fazer é:

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

Então:

  • Adicione <link> ao início do número de linhas pares (por exemplo, linhas 2, 4, 6, 8, etc ...)
  • Adicione </link> ao final do número de linhas pares (por exemplo, linhas 2, 4, 6, 8, etc ...)
por Paul M 13.11.2012 / 04:06

6 respostas

3

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

  • Abra o arquivo que você deseja editar
  • Ir para o início da primeira linha no arquivo
  • Clique na macro - > Inicie a opção de gravação no menu
  • Inserir (título), pressione o botão final para ir até o final da linha, insira (/ título)
  • pressione o botão home ir para o começo 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, insira (/ link)
  • pressione o botão home ir para o começo da linha
  • pressione o botão para baixo para ir para a linha 3
  • Clique na macro - > Parar gravação opção no menu

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

    
por 13.11.2012 / 06:56
3

Talvez você possa abordar isso de uma maneira diferente de "linhas alternativas" (o que seria realmente mais bem servido usando uma linguagem de script).

Supondo que as linhas que você deseja incluir com "link" contenham algo que as identifique como um link, você pode substituir essas linhas primeiro e, em seguida, assumir que todas as legendas restantes devem ser títulos. Então, digamos que suas linhas de links contenham "http":

  1. Control-H para abrir o diálogo de substituição
  2. Insira (http.*) como o critério de pesquisa (encontre qualquer linha com http nela e armazene na variável
  3. Insira (link)(/link) como o critério de substituição - substitua o que foi encontrado na etapa anterior por ele mesmo contido nas tags de link
  4. Substituir tudo - agora todas as suas linhas de link estão fechadas, todas as linhas restantes devem ser títulos
  1. Insira ^([^(\(link\))]*)$ como o critério de pesquisa (encontre qualquer linha que não contenha (link)
  2. Insira (title)(/title) como os critérios de substituição
  3. Substituir todos

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

    
por 13.11.2012 / 06:22
2

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.

    
por 13.11.2012 / 09:07
1

Esta resposta é para aqueles que usam o Notepad ++ versão 6 e posterior. Se você estiver usando uma versão do Notepad ++ antes da versão 6, veja minha outra resposta para a solução de trabalho.

As versões anteriores do Notepad ++ tinham uma grande limitação de pesquisa / substituição que você não podia combinar com pesquisas / substituições "Estendido" e "Regex". Então, no modo "Extended", você pode procurar por "Newlines", mas você não pode pesquisar usando "wildcards" (*.?), E no modo "Regex", você pode pesquisar usando "curingas", mas você não pode t procure por "Newlines". Isso significava que você não poderia fazer buscas Regex com várias linhas (sim multilinha, mas não se a busca incluísse padrões Regex).

Começando com o Notepad ++ versão 6 e posterior, eles começaram a usar um mecanismo Regex diferente que agora permite que a pesquisa / substituição Regex procure (e substitua) "Newlines" e, ao mesmo tempo, pode pesquisar usando "curingas" (* .?), portanto, com as versões mais recentes do Notepad ++, essa substituição pode ser feita em 1 ou 2 etapas, dependendo do número (par ou ímpar) de linhas no arquivo.

Usar o método "1-Step" aqui funcionará se o arquivo sempre tiver um número "par" de linhas. Isso ocorre porque o primeiro método usa linhas em pares e faz as alterações em linhas pares e ímpares ao mesmo tempo.

Se houver um número "ímpar" de linhas no arquivo, o método "1-Step" deixará a última linha inalterada, porque não pertence a um "par" de linhas. Nesse caso, use o método "2-Step", que funcionará para todos os arquivos, independentemente do número (par ou ímpar) de linhas que ele contém.

O método "2-Step" (se houver a possibilidade de o arquivo ter um número "ímpar" de linhas "):

Passo 1. Adicione " <title> " e " </title> " a todas 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 (linhas "pares") de cada par de duas linhas:

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

Se você souber que o arquivo sempre tem um número "par", se você puder fazer a substituição inteira de uma só vez:

In "Regular Expression" Mode:  
    F:^(.*)\r\n(.*)\r\n
    R:<title></title>\r\n<link></link>\r\n
    
por 13.11.2012 / 20:33
0

Eu sei que isso não é uma resposta definitiva, mas pode levar você na direção certa. Se você der uma olhada em este site mostra que você usa a função replace no modo regex para inserir coisas no início e no final das linhas.

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

Agora, isso vai editar todas as linhas, mas isso está na metade do caminho.

    
por 13.11.2012 / 04:35
0

Eu sei que isso foi no ano passado, mas eu sou novo no regex e aceitei isso como um desafio pessoal ...

Veja Stackoverflow para adicionar números de linhas principais ( Alt + Selecionar para selecione o modo de coluna, Alt + C para o Editor de Colunas).

Use para obter essa aparência:

1  line
2  line
3  line
4  line
5  line
6  line
7  line
8  line
9  line
10 line
11 line
12 line
13 line
14 line
15 line
16 line
17 line
18 line
19 line
20 line
21 line
22 line
23 line
24 line

Em seguida, use regex para adicionar seu texto ( Strg + H , ativar o modo de pesquisa de expressões regulares). Substituir ^[0-9]+[13579]+[ ]([^\n]$) por <title></title> cuidará de cada linha desigual maior que 10 . A substituição de ^[0-9]+[02468]+[ ]([^\n]$) por <link></link> cuidará de todas as linhas pares maiores que 10 .

Altere as 10 primeiras linhas por mão ou copie-as para um novo arquivo e use ^[13579]+[ ]([^\n]$) nelas.

    
por 20.04.2014 / 09:51