Este não é exatamente um problema de sintaxe sed
, é um problema de sintaxe find
.
O {}
é um contêiner que substituirá o nome do arquivo que está sendo processado pelo comando sed
.
Se você usa find
assim:
$ find . -type f -name *.py -exec head {} \;
Isso localizará scripts Python e mostrará a cabeça de cada arquivo. Se você tiver três scripts no diretório atual:
- 1.py
- 2.py
- 3.py
O {}
conterá cada nome de arquivo e executará o comando head
em cada arquivo.
O argumento -exec
precisa de ;
no final para poder reconhecer o final dos argumentos do comando ( sed
neste caso), mas, para proteger ;
da expansão, é necessário escapar dele com o \
.
Lembre-se de que você pode executar vários comandos por vez se usar o ;
:
$ ls; pwd;
Isso listará os diretórios ( ls
) e imprimirá seu diretório de trabalho ( pwd
). O argumento -exec
também precisa de ;
. Mas como você não quer confundir o ;
que separa comandos com o ;
que faz parte do argumento -exec
de find
, você precisa escapar com o \
.
Como alternativa, você pode usar aspas em torno do ;
:
$ find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} ";"
Espero ter deixado claro