Нет способа, которым "[0-9.]*"
может соответствовать 'chupa-cabra.muz.id'
, но, не зная, как выглядят допустимые значения, мы можем только строить догадки.Возможно, '[^']*'
будет делать то, что вы хотите, хотя вам нужно понимать механизмы цитирования оболочки, чтобы правильно добраться до sed
.В данном конкретном случае самым простым на сегодняшний день является использование двойных кавычек вокруг сценария sed
вместо одиночного:
sed -i '' "s/ADDRESS_ORIGIN = *'[^']*'/ADDRESS_ORIGIN = 'chapuza'/" constants.js
, хотя, если вы знаете, что делаете, вы также можете сделать это с чередующимся одиночными двойные кавычки:
sed -i '' 's/ADDRESS_ORIGIN = *'"'[^']*'"'/ADDRESS_ORIGIN = '"'chapuza'/" constants.js
Основной механизм здесь заключается в том, что соседние строки будут склеены оболочкой в одну строку.Таким образом, "a"'b'
- это двойная кавычка a
, за которой следует одинарная кавычка b
.После того, как оболочка выполнит ее синтаксический анализ, вы получите строку ab
.А теперь представьте себе, что a
- это буквальная одинарная кавычка, а b
- это буквальная двойная кавычка.
... Или, возможно, вы хотите заменить только первый токен перед точкой?Тогда '[^.']*\.
будет соответствовать, и вы захотите заменить на 'chapuza.
Или использовать обратную ссылку '[^.']*\(['.]\)
и заменить на 'chapuza\1
В общем случае, конечно, двойные кавычки имеют различную семантикучем одиночный, поэтому, если в вашем скрипте используются символы, которые будут искажены оболочкой при переключении кавычек, вам необходимо добавить обратную косую черту перед ними или переключиться на механизм «квотирования на качелях», который я описал выше.Но в этом конкретном случае ваш пример сценария не требует каких-либо изменений для адаптации к двойным кавычкам.