Embora o sed seja comumente usado para esses tipos de tarefas, na verdade, ele não é projetado para eles - seu nome é stream editor.
A ferramenta projetada para edição não-interativa do arquivo é ex . ( vi é a forma "editor visual" de ex .) Particularmente quando você deseja editar arquivos no lugar, ex é uma ferramenta muito superior a sed .
Neste caso, os comandos usados são quase idênticos ao comando sed dado anteriormente, mas eles não precisam ser. O seguinte é compatível com POSIX (ao contrário de sed -i ).
for file in *.php; do ex -sc '%s/[ăâ]/a/ge | %s/ș/s/ge | %s/ț/t/ge | %s/î/i/ge | x' "$file" ; done
Explicação:
-s inicia o "modo silencioso" na preparação para o processamento em lote. -c especifica o (s) comando (s) a ser executado (s).
% significa aplicar o seguinte comando a todas as linhas do arquivo. Os comandos s/// são bastante autoexplicativos; A flag e no final significa que quaisquer erros (devido ao padrão não encontrado) são suprimidos e o processamento de arquivos continuará.
| é um separador de comando (não um pipe).
x informa ex para gravar quaisquer alterações no arquivo (mas somente se houver alterações ) e sair.
Se você deseja a edição de arquivos no local, ex é a ferramenta preferida. Se você quiser visualizar as alterações antes de criá-las, recomendamos usando tr como sugere @gardenhead.
(É claro que, se você estiver usando um sistema de controle de versão apropriado, como o git, poderá fazer as alterações usando ex e comparar os arquivos com a versão antiga executando git diff .)