Se podría utilizar sed
's w
, marca con cualquiera /dev/stderr
, /dev/tty
, /dev/fd/2
si es compatible en su sistema. Por ejemplo, con una entrada file
como:
foo first
second: missing
third: foo
none here
corriendo
sed -i '/foo/{
s//bar/g
w /dev/stdout
}' file
salidas:
bar first
third: bar
aunque el file
contenido se cambió a:
bar first
second: missing
third: bar
none here
Entonces, en su caso, ejecutando:
find . -type f -printf '\n%p:\n' -exec sed -i '/foo/{
s//bar/g
w /dev/fd/2
}' {} \;
editará los archivos en el lugar y la salida:
./file1:
cosas de bar
más bar
./file2:
./file3:
bar primero
tercero: barra
También puede imprimir algo como, original line >>> modified line
por ejemplo:
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 los archivos en el lugar y genera:
./file1:
foo cosas >>> cosas de bar
más foo >>> más bar
./file2:
./file3:
foo primero >>> barra primero
tercero: foo >>> tercero: bar
for x in `find . -type f`; do echo ///File $x: ; sed --quiet 's/abc/def/gp' $x; done