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

Поиск и замена строки на нескольких файлах с терминала unix

Мы преобразуем все статические html-страницы в нашу базу кода на php-страницы. Первым шагом было бы изменить все расширение .html файла на .php(что я уже сделал). Второй шаг - обновить все ссылки на каждой из этих html-страниц, чтобы указать на новые страницы php.

(например, внутри index.php у меня есть ссылки на both contact.html и about-us.html. Теперь, когда мы заменили каждое расширение .html файла на .php, нам нужно изменить contact.html для контакта. php и тому подобное, about-us.html - about-us.php).

то, что я хочу сделать сейчас, - это поиск определенной строки для нескольких файлов. (найдите "contact.html" внутри многих файлов, таких как index.php, index2.php, index3.php и т.д. и т.д.), после чего замените все "contact.html" во всех этих файлах на "contact.php".

Я не знаком с командной строкой unix, и я до сих пор видел здесь похожие вопросы на форуме, но не совсем понимаю, какой из них мог бы помочь мне достичь того, чего я хочу. Я использую cygwin, и, если возможно, мне нужно решить это без perl script, так как я его не установил. Мне нужно попробовать использовать sed, grep, find или что-то еще.

Итак, если кто-либо из вас подумает, что это дубликат, пожалуйста, укажите мне соответствующую должность там. спасибо за ваше время.

4b9b3361

Ответ 1

Попробуйте следующее:

find . -name '*.html' -exec sed -i 's/\.html/\.php/g' "{}" \;

Он найдет все файлы в текущем и подкаталоге, которые заканчиваются на .html, и запустите sed для каждого из них, чтобы заменить .html на .php где-нибудь в нем.

Подробнее см. http://content.hccfl.edu/pollock/unix/findcmd.htm.

Ответ 2

На моем Mac мне пришлось добавить параметр в параметр -i: расширение для добавления имени (в этом случае ничего, поэтому файл сохраняется на месте).

find . -name '*.html' -exec sed -i '' 's/\.html/\.php/g' "{}" \;

Ответ 3

You can certainly use ack to select your files to update. For example,
to change all "foo" to "bar" in all PHP files, you can do this from 
the Unix shell: 

perl -i -p -e's/foo/bar/g' $(ack -f --php)

Источник: man ack

Ответ 5

Это сработало для меня:

find . -type f -print0 | xargs -0 sed -i 's/str1/str2/g'

Ответ 6

Ниже script может помочь заменить строку в файлах:

#!/bin/bash
echo -e "please specify the folder where string has need to be replaced: \c"
read a
echo -e "please specify the string to be replaced: \c"
read b
echo -e "please specify the string: \c"
read c
find $a -type f -exec sed -i 's/'"$b"'/'"$c"'/g' {} \; > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "string has been replaced..."
else                                                                         echo "String replacement has been failed"
exit0
fi