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
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:
Text_1
e Substitua por Text_A
Text1
e Substitua por TextB
Não estou tentando fazer um Find and Replace em vários documentos.
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
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
É 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.
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
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
GNUWin32 sed
para Windows
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.
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")
Isso funciona para todos os números (para remover todos os números do texto / artigo)
Pressione Ctrl + H para abrir a caixa de diálogo Localizar e substituir.
Na caixa "Localizar", digite ^ #
Deixe a caixa "Substituir por" vazia.
Substituir tudo.