Por favor, corrija-me se eu entendi mal a sua pergunta, mas a partir de sua descrição, eu entendo que significa que você tem um único (possivelmente muito grande) Ascii .txt
documento e que quando você diz que as alterações devem ser aplicadas "em ordem", você quer dizer que você gostaria de fazer a primeira pesquisa / substituição em todo o documento, em seguida, a segunda pesquisa / substituição em todo o documento e assim por diante.
Talvez a solução mais fácil seja criar um arquivo (chamá-lo sedscript
) contendo um sed
script, uma linha por alteração. Aqui está um exemplo. o g
no final significa "global", isto é, substitua todas as ocorrências, não apenas a primeira ocorrência em qualquer linha dada.
s/foo/bar/g
s/hello/world/g
s/yellow/green/g
:
Você pode então executar isso da seguinte maneira:
sed -f sedscript infile.txt > outfile.txt
Se você está satisfeito com a saída, simplesmente mv
volta por cima da entrada:
mv outfile.txt infile.txt
Se você está em uma máquina Linux, isso vem com sed
. Se você está no Windows, você pode obter sed
(e mv
) com qualquer Cygwin ou o meu Concha Hamilton C (incluindo o versão gratuita ).
Adicionado:
Como você também gostaria de considerar as correspondências que terminam com as extremidades da linha, então, sim, uma maneira de fazer isso é substituir todas as extremidades da linha por um caractere ou cadeia especial, fazer as operações de pesquisa / substituição pretendidas e encerrar a linha de volta quando estiver pronto.
A maneira mais fácil de fazer as conversões de fim de linha com sed
está em estágios de pipeline separados. No meu exemplo aqui, eu substituí o \r\n
seqüências com um #
mas poderia ser uma string completamente arbitrária (mas é mais fácil se você puder usar um único caractere).
sed 's/\r\n/#/' infile.txt | s -f sedscript | sed 's/#/\r\n/g' > outfile.txt
Dentro do seu sedscript
arquivo, você procuraria / substituiria nas duas variações, com um espaço entre as palavras ou o que quer que você tenha substituído.
Se você é capaz de usar apenas um único caractere e não precisa de uma string multicharacter para garantir exclusividade, você pode usar \(...\)
notação para criar um tagged regular expression por aí [...]
lista de caracteres que podem separar uma palavra. O que quer que corresponda pode ser inserido na string de substituição \1
.
Aqui está uma captura de tela como isso pode funcionar.
infile.txt
com o seu caminho real,C:\Users\Eric\Documents\unformatted.txt
.Normalmente, os programas são bons em aplicar uma única combinação de pesquisa e substituição a vários arquivos, e não o contrário.
Para mim, parece que sua melhor aposta é usar um programa de processador de texto com recursos de macro. Em seguida, você pode escrever uma função que executa a substituição e, em seguida, chamá-la centenas de vezes com as cadeias de caracteres de pesquisa / substituição. Processadores de texto habilitados para macro são, por exemplo, o LibreOffice Writer e o Microsoft Word.
fonte
PEIDAR deve ser capaz de ajudá-lo. Basta criar um arquivo de lote com várias chamadas FART, e se você quiser substituir novas linhas (
\r\n
), permitir o uso da sintaxe no estilo C-C
ou--c-style
parâmetros.fonte