Encontre e substitua vários valores diferentes ao mesmo tempo


14

Eu tenho um arquivo com várias instâncias Text_1e Text1e eu preciso substituir ambas as cordas com Text_Ae TextBrespectivamente.

Atualmente, estou executando duas funções Localizar e Substituir em cada arquivo, um que o encontra Text_1e o substitui Text_Ae o outro que o encontra Text1e substitui 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 regular, o OO Writer, o MS Word, se for mais fácil. Idealmente, eu poderia fazer isso no Dreamweaver ou no Notepad ++, mas estou aberto a baixar outra coisa para concluir o trabalho. Eu preferiria não precisar fazer nada da linha de comando ou criar um arquivo em lotes (embora eu esteja ciente disso, não o entendo realmente).

Caso a descrição acima não esteja clara, deixe-me explicar dessa maneira ...

Quero executar Localizar e Substituir 1 vez em 1 documento e desejo que execute TODAS as seguintes ações durante essa instância de Localizar e Substituir:

  1. Localizar Text_1 e substituir porText_A
  2. Localizar Text1 e substituir porTextB

Estou não tentar fazer uma pesquisa e substituir em vários documentos.


Pode ser possível usar o Regexp find and replace se houver um padrão distinto. Senão, não é possível @matt
Sathyajith Bhat

Respostas:


10

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

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


23

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

Encontre: Texto_1 e Substitua por: Texto_A

Localizar: Text2 e substituir por: TextB

Localizar: (Texto_1) | (Texto2)

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 obtive isso da seguinte resposta: /programming//a/16104946/287101


3

Usando o Notepad ++, você pode

  • Abra todos os arquivos que contenham as palavras que você deseja substituir e use Localizar / Substituir em todos os arquivos abertos

    insira a descrição da imagem aqui

  • Use Localizar / Substituir nos arquivos

    insira a descrição da imagem aqui

  • Grave uma macro executando as opções de localização e substituição e reproduza-a


Não é isso que estou tentando fazer. Não quero substituí-lo em vários arquivos ao mesmo tempo, quero substituir várias seqüências de caracteres em um arquivo ao mesmo tempo. Quero poder executar uma localização e substituição e fazer com que ele procure no documento e substitua todas as instâncias de Text_1 por Text_A e todas as instâncias de Text1 com TextB. Duas seqüências separadas substituídas por dois valores separados em um arquivo.
Matt

Os links de imagem estão quebrados, há alguma chance de consertá-los de alguma forma?
Bobby

2

É melhor executar o Find & Replace duas vezes, porque há duas substituições diferentes. No entanto, deve haver muito pouca compensação no tempo de processamento. Considere o seguinte:

Executando Localizar e substituir uma vez, pesquisando termo por termo:

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

Para fins de execução, assumiremos que é linear e diremos que isso é executado em O (n) tempo.

Você deseja encontrar dois termos diferentes. A execução de Localizar e substituir duas vezes se parece com:

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

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

o que levaria tempo O (2x1n) ou o dobro da busca 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
...

A obtenção dos termos não exige tanto poder de processamento; portanto, você está procurando dois conjuntos de pesquisas para cada termo, fornecendo um tempo de O (1x2n), executando uma vez, mas pesquisando dois termos.

Enquanto você economizaria algum tempo para não carregar cada termo duas vezes, você gastaria mais tempo pesquisando cada termo duas vezes, portanto, há poucas vantagens e, como esse recurso seria usado com menos frequência do que pesquisar um termo com uma substituição, os desenvolvedores de aplicativos simplesmente assumem que não escrevem. essa funcionalidade.

AVISO LEGAL PARA PROGRAMADORES: Este é um exemplo generalizado. Sei que é melhor, mas estou tentando mostrar por que esse recurso não foi encontrado.


0

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

As extensões GNU comumente usadas para a sintaxe da expressão regular incluem:

  • a ? operador, significando zero ou único;
  • o | operador de alternância ("foo | bar" corresponde a "foo" ou "bar")
  • modificadores como / g para ganancioso ou / i para não diferenciar maiúsculas de minúsculas;
  • {a, b} para indicar entre a e b símbolos de um tipo.
  • (padrão) + para machucar uma ou mais correspondências do mesmo padrão

O componente Scitilla, subjacente ao Notepad ++, é estritamente compatível com POSIX e não reconhece essas extensões. Você pode consultar expressões regulares para obter um resumo completo e alguns exemplos

Fonte

Veja também

GNUWin32 sedpara Windows


0

Eu uso o TextCrawler para localizar e substituir em lote. (Eu uso o Notepad ++ para pesquisa / substituição única em vários arquivos, pois é mais rápido que o Textcrawler.) O TextCrawler suporta expressões regulares e pesquisa / localização normais. Os arquivos em lote podem ser salvos e recarregados para uso futuro.


Consulte Como eu recomendo o software nas minhas respostas? Em particular, no mínimo, diga onde obter o software.
G-Man diz 'Reinstate Monica'

A função de lote está disponível apenas na versão Pro não gratuita do TextCrawler.
Hobbes

0

Isso também pode ser feito usando o ActiveX Plugin (para o Notepad ++) e executando o script personalizado:

NppApplication.activeEditor.text
=NppApplication.activeEditor.text
.replace(/Text_1/g,"Text_A")
.replace(/Text1/g,"TextB")

Isso funciona, mas observe que, devido a um erro atual no plug-in ActiveX, um caractere NULL é anexado ao arquivo toda vez que você executa o script.
Aidan

-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. Substitua tudo.


1
O OP não quer apenas remover os números, eles querem substituí-lo por uma letra.
Booyaa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.