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.
