Подтвердить что ты не робот

Найти и заменить в нескольких файлах в командной строке

Как найти и заменить строку в командной строке в нескольких файлах в unix?

4b9b3361

Ответ 1

существует много способов. Но один из ответов:

find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'

Ответ 2

Как и решение Zombie (и, скорее, я предполагаю), но с sed (стандартным для многих дистрибутивов и OSX) вместо Perl:

find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'

Это заменит все foo-записи в ваших файлах Python ниже текущего каталога на панели и создаст резервную копию для каждого файла с расширением .py.bak.

И удалить файлы .bak:

find . -name "*.bak" -delete

Ответ 3

Я всегда делал это с помощью ed скриптов или ex скриптов.

for i in "[email protected]"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof

Команда ex - это только: режим линии из vi.

Ответ 4

Используя find и sed с именем или каталогами с пространством, используйте это:

find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'

Ответ 5

с недавней оболочкой bash и предполагая, что вам не нужно перемещаться по каталогам

for file in *.txt
do
while read -r line
do
    echo ${line//find/replace} > temp        
done <"file"
mv temp "$file"
done