Bem, você não precisa ter dois comandos find
separados:
find abc -type f -exec sed -n 's/test/best/pg' {} + -exec sed -i 's/test/best/g' {} +
... e você não precisa do ./
na frente de abc
.
Estou interessado se houver uma solução mais elegante para o postado abaixo.
[]$ find ./abc -type f -exec sed -n 's/test/best/pg' {} + ; find ./abc -type f -exec sed -i 's/test/best/g' {} +
O primeiro comando find sed
imprime todos os padrões encontrados para o console. O segundo comando find sed
realmente substitui os padrões dentro do arquivo.
Os problemas que encontrei:
sed -n -i
(não pode ter múltiplos modificadores / argumentos de linha de comando) -? alguém confirma?
sed
não possui um modificador nativo para imprimir os resultados antes da substituição -? teve problemas para encontrar uma solução, talvez ela exista, e o comando pode ser modificado (isto é, o resultado abaixo não será produzido e será substituído pelas costas!).
find ./abc -type f -exec sed -i 's/test/best/pg' {} +
Se você está no GNU / qualquer coisa que você pode
find abc -type f -exec sed -i 's/test/best/gw /dev/fd/2' {} +
mas em seu texto você mencionou que deseja imprimir os resultados antes da substituição, não sabe ao certo o que "resultados" significa, mas
find abc -type f -exec sed -i '/test/w /dev/fd/2
s//best/g' {} +
imprime as linhas que serão alteradas antes da substituição.
Tags sed