Я повторно использую много кода с одного сайта на новый. Мне нужно изменить два адреса ссылок, например, / abc / to / cba / и abc.com - abc.us. Я могу войти на сервер и использовать программное обеспечение терминала или редактировать его локально с помощью редактора php. У редактора у меня нет такой возможности. У меня есть тысячи строк кода, и я не могу найти все случаи, когда необходимо изменение.
Должно быть простое решение. Я просто не знаю, где его найти.
В репозиториях Ubuntu по умолчанию есть приложение для именно этого рабочего процесса, которое называется Geany. Geany настолько легок, что может одновременно редактировать 50 веб-файлов. Поскольку Geany - это программа с графическим интерфейсом, она прозрачно проста в использовании и имеет преимущество перед терминалом в том, что вы можете видеть, что вы делаете, потому что каждый файл открывается на отдельной вкладке. Функция Geany Replace поддерживает регулярные выражения, которые полезны для редактирования тегов разметки. Когда я закончу редактирование нескольких файлов, я обычно открываю все 50 из них вместе в веб-браузере, чтобы проверить свою работу.
Чтобы установить Geany во всех поддерживаемых в настоящее время версиях Ubuntu, откройте терминал и введите:
sudo apt-get install geany
Вы можете использовать grep
, чтобы найти файлы, содержащие abc.com
. И тогда вы можете использовать sed
для замены abc.com
на abc.us
. Вам просто нужно быть осторожным, чтобы избежать ложных срабатываний. Сначала я добавлял все файлы сайта в репозиторий Git, затем выполнял замены, проверял замены на git diff
, чтобы, если что-то пошло не так, я мог легко откатиться.
cd path/to/site
git init
git add .
git commit -m 'Add files'
grep -rlFwZ abc.com . | xargs -0 sed -i 's/\<abc\.com\>/abc.us/g'
git diff
Объяснение флагов grep
:
-r
рекурсивно искать во всех подкаталогах -l
печатать имена файлов, которые соответствуют вместо спички -F
обрабатывают шаблон как буквенную строку, а не как регулярное выражение (оставьте .
точку, а не «любой символ») -w
соответствуют целым словам (так что «foo abc.com bar» совпадает, а «fooabc.com bar» или «foo abc.combar» - нет) В паттерне sed
the \<
и \>
служат той же логике, что и -w
в grep
, а .
экранируется, чтобы служить той же логике, что и -F
grep
.
Эти две команды должны быть полезны:
grep -RlZE abc.com /path/to/folders | xargs -0 sed -i 's/abc.com/abc.us/g'
grep -RlZE \/abc\/ /path/to/folders | xargs -0 sed -i 's_/abc/_/cba/_g'
Дополнительная информация:
grep -RlZE abc.com /path/to/folders
: ищет файлы, содержащие текст, который вы пытаетесь изменить, и возвращает путь к файлу. Это будет дано команде sed
.
-R
: рекурсивный поиск по файлам
-l
: путь к возвращаемому файлу только для совпадений -E
: переключатель расширенных регулярных выражений grep -Z
: Используется для обработки файлов с нечетными строковыми символами Чтобы создавать резервные копии, предполагая, что пространство не является проблемой, запускайте команды, например, для создания резервных копий, если что-то идет не так:
grep -RlZE abc.com /path/to/folders | xargs -0 sed -i.bak 's/abc.com/abc.us/g'
grep -RlZE \/abc\/ /path/to/folders | xargs -0 sed -i.bak 's_/abc/_/cba/_g'