1

Учитывая следующую команду поиска: найти. | xargs grep 'userTools' -sl

Как я могу использовать sed на результатах этой команды?

выход:

./file1.ext
./file2.ext
./file3.ext

3 ответа3

4

Я предполагаю, что вы хотите выполнить некоторую операцию sed с содержимым каждого из файлов, а не со списком имен файлов, поскольку вы, похоже, уже знаете, как это сделать. Ответ частично зависит от имеющейся у вас версии sed . Если он поддерживает опцию -i (редактировать файлы на месте), вы можете использовать xargs снова так:

find . | xargs grep 'userTools' -sl | xargs -L1 sed -i 's/this/that/g'

Если у вашего sed нет опции -i , вы можете сделать это:

find . | xargs grep 'userTools' -sl | while read file
do
sed 's/this/that/g' "$file" > tmpfile
mv tmpfile "$file"
done
1
find . -print0 | xargs -0 grep -slZ 'userTools' | xargs -0 sed -i 's/foo/bar/'

или же

find . -print0 | xargs -0 sed -i '/userTools/ s/foo/bar/'

или же

ack -l --print0 'userTools' | xargs -0 sed -i 's/foo/bar/'
1
find \Path_where_files_are -type f -name 'file_type' -exec  sed -e 's/"text_to_be_changed"/"text_to_be_changed_to"/' {} +

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .