Вы можете использовать sed
«s w
флаг либо /dev/stderr
, /dev/tty
, /dev/fd/2
если поддерживается в вашей системе. Например, с помощью ввода file
:
foo first
second: missing
third: foo
none here
Бег
sed -i '/foo/{
s//bar/g
w /dev/stdout
}' file
выходы:
bar first
third: bar
хотя file
содержание было изменено на:
bar first
second: missing
third: bar
none here
Итак, в вашем случае работает:
find . -type f -printf '\n%p:\n' -exec sed -i '/foo/{
s//bar/g
w /dev/fd/2
}' {} \;
отредактируем файлы на месте и выведем:
./file1:
барные вещи
больше бар
./file2:
./file3:
бар первым
третье: бар
Вы также можете напечатать что-то вроде, original line >>> modified line
например:
find . -type f -printf '\n%p:\n' -exec sed -i '/foo/{
h
s//bar/g
H
x
s/\n/ >>> /
w /dev/fd/2
x
}' {} \;
редактирует файлы на месте и выводит:
./file1:
Foo вещи >>> бар вещи
больше foo >>> больше бар
./file2:
./file3:
foo first >>> сначала бар
третье: foo >>> третье: бар
for x in `find . -type f`; do echo ///File $x: ; sed --quiet 's/abc/def/gp' $x; done