Как сделать глобальное изменение кода

Я повторно использую много кода с одного сайта на новый. Мне нужно изменить два адреса ссылок, например, / abc / to / cba / и abc.com - abc.us. Я могу войти на сервер и использовать программное обеспечение терминала или редактировать его локально с помощью редактора php. У редактора у меня нет такой возможности. У меня есть тысячи строк кода, и я не могу найти все случаи, когда необходимо изменение.

Должно быть простое решение. Я просто не знаю, где его найти.

0
задан 16 December 2017 в 19:48

3 ответа

В репозиториях Ubuntu по умолчанию есть приложение для именно этого рабочего процесса, которое называется Geany. Geany настолько легок, что может одновременно редактировать 50 веб-файлов. Поскольку Geany - это программа с графическим интерфейсом, она прозрачно проста в использовании и имеет преимущество перед терминалом в том, что вы можете видеть, что вы делаете, потому что каждый файл открывается на отдельной вкладке. Функция Geany Replace поддерживает регулярные выражения, которые полезны для редактирования тегов разметки. Когда я закончу редактирование нескольких файлов, я обычно открываю все 50 из них вместе в веб-браузере, чтобы проверить свою работу.

Чтобы установить Geany во всех поддерживаемых в настоящее время версиях Ubuntu, откройте терминал и введите:

sudo apt-get install geany
2
ответ дан 16 December 2017 в 19:48

Вы можете использовать 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.

2
ответ дан 16 December 2017 в 19:48

Эти две команды должны быть полезны:

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'
1
ответ дан 16 December 2017 в 19:48

Другие вопросы по тегам:

Похожие вопросы: