Форма sed
, которая находит вхождение и затем использует альтернативные разделители, чтобы избежать экранирования '/'
символов, можно записать:
sed '/locate/s#find#replace#'
Но так как вы хотите иметь возможность передавать IP как переменную, вам нужно заключить выражение в двойные кавычки, чтобы произошло расширение переменной, и мы захотим использовать квантификаторы {x,y}
, поэтому нам понадобится -r
опция, позволяющая включить расширенное сопоставление регулярных выражений , в результате чего появится форма
sed -r "/locate/s#find#replace#"
В вашем случае, учитывая IP-адрес, указанный в переменной ip
, и ваше желание найти либо WEB_URL
, либо API_URL
(за которым следует пробел и знак '='
), а затем только заменить IP-адрес на тот, который содержится в $ip
, вы можете использовать:
sed -r "/(WEB|API)_URL\s=/s#[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}#$ip#"
Где твой
- locate is
/(WEB|API)_URL\s=/
- найти для IP -
[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}
- заменить is
$ip
Пример входного файла
Файл примера показывает OTH_URL
и API_URL
(без пробелов и '='
), которые остаются нетронутыми:
$ cat environment.ts
const OTH_URL = 'http://10.10.10.10';
const WEB_URL = 'http://10.10.10.10';
const API_URL = 'http://20.20.20.20:8080';
const API_URL (can either be 'http://10.10.10.10' or 'http://10.10.10.10:8080')
Запуск выражения sed
в приведенном выше файле примера приведет к:
$ ip=12.12.12.12
$ sed -r "/(WEB|API)_URL\s=/s#[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}#$ip#" \
environment.ts
const OTH_URL = 'http://10.10.10.10';
const WEB_URL = 'http://12.12.12.12';
const API_URL = 'http://12.12.12.12:8080';
const API_URL (can either be 'http://10.10.10.10' or 'http://10.10.10.10:8080')
Где ни строка OTH_URL
, ни строка, в которой за API_URL
не следует пробел и '='
не остаются неизменными.
Вам нужно будет сделать отдельные звонки, чтобы изменить WEB_URL
и API_URL
на разные IP-адреса, если это необходимо. Это можно сделать с помощью отдельных sed
выражений -e
, например:
$ ip1=12.12.12.12
$ ip2=14.14.14.14
$ sed -r -e "/WEB_URL\s=/s#[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}#$ip1#" \
-e "/API_URL\s=/s#[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}#$ip2#" \
environment.ts
const OTH_URL = 'http://10.10.10.10';
const WEB_URL = 'http://12.12.12.12';
const API_URL = 'http://14.14.14.14:8080';
const API_URL (can either be 'http://10.10.10.10' or 'http://10.10.10.10:8080')
Посмотрите вещи и дайте мне знать, если у вас есть вопросы.