Encontre e substitua vários valores diferentes de uma só vez

13

Eu tenho um arquivo com várias instâncias de Text_1 e Text1 e preciso substituir essas duas sequências por Text_A e TextB , respectivamente.

Atualmente, estou executando duas funções Localizar e substituir em cada arquivo, que encontra Text_1 e o substitui por Text_A , e o outro que encontra Text1 e o substitui por TextB .

Existe alguma maneira de fazer isso de uma só vez, em vez de ter que executar "Localizar e substituir" duas vezes?

Estou usando o Dreamweaver CS3, mas também tenho o Notepad ++, o Notepad normal, o OO Writer e o MS Word, se forem mais fáceis. Idealmente, eu poderia fazer isso no Dreamweaver ou Notepad ++, mas estou aberto para fazer o download de outra coisa para fazer o trabalho. Eu prefiro não ter que fazer qualquer coisa de linha de comando ou criar um arquivo de lote (enquanto eu estou ciente disso, eu não entendo isso realmente).

Caso a descrição acima não seja clara, deixe-me explicar desta forma ...

Eu quero rodar o Find & Substitua 1 vez em 1 documento e eu quero que ele faça ALL dos seguintes itens durante esse Find & Substituir instância:

  1. Encontre Text_1 e Substitua por Text_A
  2. Encontre Text1 e Substitua por TextB

Não estou tentando fazer um Find and Replace em vários documentos.

    
por matt 15.11.2010 / 14:46

8 respostas

10

Dê uma olhada em Sed . Você pode facilmente atingir seu objetivo por apenas uma linha de comando

sed -e "s/Text_1/TextA/" -e "s/Text1/TextB/" <your_file.txt>your_file_new.txt

    
por 15.11.2010 / 16:36
19

Desde o Notepad ++ 6.0, é realmente possível sem scripts usando a seguinte técnica:

Find: Text_1 and Replace with: Text_A

Find: Text2 and Replace with: TextB

Localizar: (Text_1) | (Text2)

Substituir: (? 1Text_A) (? 2TextB)

A sintaxe geral é:

Find: (FindA)|(FindB)|(FindC)...

Replace: (?1ReplaceA)(?2ReplaceB)(?3ReplaceC)...

? 1 refere-se à primeira frase capturada e assim por diante.

Eu recebi isso da seguinte resposta: link

    
por 09.06.2014 / 16:00
2

É melhor correr Encontre & Substitua duas vezes, porque você tem duas substituições diferentes acontecendo. No entanto, deve haver muito pouca compensação no tempo de processamento. Considere o seguinte:

Correndo Encontre & Substitua uma vez, pesquisando termo por termo:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Para fins de execução, vamos assumir que é linear e dizer que isso é executado no tempo O (n).

Você quer encontrar dois termos diferentes. Correndo Encontrar & Substituir duas vezes parece:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Get Term
  Does term match?  If so, replace term
Get Next Term
...

que levaria O (2x1n) tempo, ou o dobro do tempo que procura por um termo.

A pesquisa de dois termos com duas substituições seria teoricamente semelhante a:

Get Term
  Does first term match?  If so, replace first term
  Does second term match?  If so, replace second term
Get Next Term
...

Obter os termos não requer tanto poder de processamento, então, essencialmente, você está procurando dois conjuntos de pesquisas para cada termo, dando um tempo de O (1x2n), executando uma vez, mas pesquisando dois termos.

Enquanto você economizaria tempo não carregando cada termo duas vezes, gastaria mais tempo pesquisando cada termo duas vezes, portanto há pouca desvantagem e, como esse recurso seria usado com menos frequência do que pesquisar um termo com uma substituição, os desenvolvedores de aplicativos apenas Suponha que não escreva essa funcionalidade.

DISCLAIMER TO PROGRAMMERS: This is a generalized example. I know it is better but I'm trying to show why that feature isn't found.

    
por 15.11.2010 / 16:22
2

Usando o Notepad ++, você pode

  • Abra todos os arquivos contendo as palavras que você deseja substituir e use Find / Replace em todos os arquivos abertos

  • UseFind/Replacenosarquivos

  • Grave uma macro executando as opções localizar e substituir e reproduzi-la

por 15.11.2010 / 15:43
0

O suporte a expressões regulares no Notepad ++ é severamente limitado. Sem o operador de alternância, não há esperança de sequer chegar perto do que você deseja fazer. Você precisará usar sed ou um editor que tenha melhor suporte a regex.

Commonly used GNU extensions to the regular expression syntax include:

  • the ? operator, meaning zero or one of a kind;
  • the | alternation operator ("foo|bar" matches either of "foo" or "bar")
  • modifiers like /g for greedy or /i for case insensitive;
  • {a,b} to denote betwen a and b tokens of a kind.
  • (pattern)+ to mach one or more matches of the same pattern

The Scitilla component, which underpins Notepad++, is strictly POSIX-compatible and does not recognise these extensions. You can consult Regular Expressions for a complete rundown and some examples

Fonte

Veja também

GNUWin32 sed para Windows

    
por 15.11.2010 / 23:58
0

Eu uso o TextCrawler para encontrar e substituir lotes. (Eu uso o Notepad ++ para busca única / substituição em vários arquivos, uma vez que é mais rápido que o Textcrawler.) TextCrawler suporta expressões regulares, assim como busca / localização normal. Os arquivos em lote podem ser salvos e recarregados para uso futuro.

    
por 06.11.2014 / 21:39
0

Também pode ser feito usando o plugin ActiveX (para o Notepad ++) e executando o script personalizado:

NppApplication.activeEditor.text
=NppApplication.activeEditor.text
.replace(/Text_1/g,"Text_A")
.replace(/Text1/g,"TextB")
    
por 10.10.2016 / 11:12
-1

Isso funciona para todos os números (para remover todos os números do texto / artigo)

  1. Pressione Ctrl + H para abrir a caixa de diálogo Localizar e substituir.

  2. Na caixa "Localizar", digite ^ #

  3. Deixe a caixa "Substituir por" vazia.

  4. Substituir tudo.

por 10.06.2013 / 14:29