Використання sed для заміни тексту зі списку файлів з пошуку


2

Дано таку команду find: знайти. | xargs grep 'userTools' -sl

Як я можу використовувати sed за результатами цієї команди?

вихід:

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

Що ти хочеш sedзробити?
Денніс Вільямсон

Так вибачте, я раніше не уточнив. Мені потрібна sed для заміни вмісту кожного файлу у списку
Kyle Hayes

Відповіді:


5

Я припускаю, що ви хочете виконати деяку 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"/' {} +
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.