2016-04-11 2 views
1

Я занят сценарием в bash, задачей которого является перемещение содержимого из подкаталога в основной каталог корня FTP. Если файлы должны содержать базу данных, скрипт должен обновить все записи SQL в базе данных.BASH - Манипулирование URL-адресом

Запросы MySQL не являются проблемой, но получение значений для поиска и замены уклоняется от меня.

Например:

У меня есть сайт в HTTP: // example.com/mysub

Мне нужно, чтобы переместить его Http: // example.com и изменить базу данных

Мне нужно удалить http: // из http: // example.com/mysub, чтобы я мог выполнить поиск и заменить значения example.com.

Любые идеи?

+0

Этот вопрос смущенно сформулирован, по крайней мере, для меня. Вы хотите заменить каждый экземпляр 'example.com/sub'' example.com/'в наборе текстовых файлов? –

+0

Если да, то вы можете сделать это с помощью sed, не нужно сначала удалять 'http: //' –

+0

. Извинения теперь кажутся довольно запутанными, когда я читаю его снова. Решение, отправленное karakfa, может сделать трюк на самом деле. – Predator

ответ

0
sed -r 's_\bhttps?://__' 

также обрабатывает протокол HTTPS, пример

$ echo "http://example.com" | sed -r 's_\bhttps?://__' 
example.com 

$ echo "https://example.com" | sed -r 's_\bhttps?://__' 
example.com 
+0

Я пытался использовать sed, но пропустил? перед: Это должно сработать благодаря вам! Собираюсь попробовать и использовать его сейчас – Predator

+0

Возможно ли запустить sed по переменной? – Predator

+0

'echo' или' printf' $ var и pipe для 'sed'. – karakfa

0

Вы можете включить extglob (shot -s extglob) и запустить следующий параметр разложения *:

var='https://example.com' 
printf '%s\n' "${var#http?(s)://}" 

Который удалит первое появление http:// или https:// с левой стороны от var.


Параметр расширения *: Выполнить man bash | less +/Parameter\ Expansion или читать далее на Bash FAQ 37. Или оба!

Смежные вопросы