Si potrebbe utilizzare sed
's w
contrassegna con entrambi /dev/stderr
, /dev/tty
, /dev/fd/2
se supportato sul sistema. Ad esempio con un input file
come:
foo first
second: missing
third: foo
none here
in esecuzione
sed -i '/foo/{
s//bar/g
w /dev/stdout
}' file
uscite:
bar first
third: bar
sebbene il file
contenuto sia stato cambiato in:
bar first
second: missing
third: bar
none here
Quindi, nel tuo caso, esegui:
find . -type f -printf '\n%p:\n' -exec sed -i '/foo/{
s//bar/g
w /dev/fd/2
}' {} \;
modificherà i file sul posto e produrrà:
./file1:
roba da bar
più bar
./file2:
./file3:
prima il bar
terzo: bar
Puoi anche stampare qualcosa come original line >>> modified line
ad esempio:
find . -type f -printf '\n%p:\n' -exec sed -i '/foo/{
h
s//bar/g
H
x
s/\n/ >>> /
w /dev/fd/2
x
}' {} \;
modifica i file sul posto e genera:
./file1:
roba da foo >>> roba da bar
più foo >>> più barra
./file2:
./file3:
prima >>> prima la barra
terzo: pippo >>> terzo: bar
for x in `find . -type f`; do echo ///File $x: ; sed --quiet 's/abc/def/gp' $x; done