Você pode usar sed
's w
marque com quer /dev/stderr
, /dev/tty
, /dev/fd/2
se suportada pelo seu sistema. Por exemplo, com uma entrada file
como:
foo first
second: missing
third: foo
none here
corrida
sed -i '/foo/{
s//bar/g
w /dev/stdout
}' file
saídas:
bar first
third: bar
embora o file
conteúdo tenha sido alterado para:
bar first
second: missing
third: bar
none here
Portanto, no seu caso, executando:
find . -type f -printf '\n%p:\n' -exec sed -i '/foo/{
s//bar/g
w /dev/fd/2
}' {} \;
irá editar os arquivos no local e na saída:
./arquivo1:
coisas de bar
mais bar
./file2:
./file3:
bar primeiro
terceiro: bar
Você também pode imprimir algo como, original line >>> modified line
por exemplo:
find . -type f -printf '\n%p:\n' -exec sed -i '/foo/{
h
s//bar/g
H
x
s/\n/ >>> /
w /dev/fd/2
x
}' {} \;
edita os arquivos no local e produz:
./arquivo1:
coisas foo >>> coisas bar
mais foo >>> mais bar
./file2:
./file3:
foo primeiro >>> barra primeiro
terceiro: foo >>> terceiro: bar
for x in `find . -type f`; do echo ///File $x: ; sed --quiet 's/abc/def/gp' $x; done