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
.)