Чтобы меньше возиться с экранированием специальных символов, таких как двойные кавычки ( и $
, если вы его используете ), вы можете просто заключить саму переменную в двойные кавычки, а остальные в одинарные. Пробелов между ними нет.
's|\("browser.startup.homepage",\) "\(.*\)"|\1 '"$ddrs"' |'
В отдельном примечании, поскольку вы не ссылаетесь на второе значение, нет причин использовать для него круглые скобки:
's|\("browser.startup.homepage",\) ".*"|\1 '"$ddrs"' |'
Аналогичным образом, если вы хотите, чтобы отображалось значение вашей переменной $ ddrs
в двойных кавычках в файле , который вы редактируете, вам нужно будет включить эти двойные кавычки:
's|\("browser.startup.homepage",\) ".*"|\1 "'"$ddrs"'" |'
Но тогда, как мне кажется, у вас, вероятно, есть более одного значения в одной строке ( или вы могли бы это сделать.) Поскольку регулярные выражения sed жадные, ваш . *
будет соответствовать остальной части строки до последней двойной кавычки . Чтобы сделать его не жадным (для этого конкретного случая использования), используйте класс символов, соответствующий чему угодно, кроме двойных кавычек:
's|\("browser.startup.homepage",\) "[^"]*"|\1 "'"$ddrs"'" |'
И, хотя случайное совпадение маловероятно, точки (.
) в первая строка не соответствует точкам, они соответствуют классу символов «любой отдельный символ». Чтобы избежать их экранирования:
's|\("browser\.startup\.homepage",\) "[^"]*"|\1 "'"$ddrs"'" |'
Похоже, вы используете разделитель запятой, но тогда вы ставите ТОЛЬКО один пробел после запятой, а не два пробела или ноль. Я подозреваю, что возможно любое количество пробелов , поэтому для надежности разрешите произвольные пробелы между запятой и двойной кавычкой:
's|\("browser\.startup\.homepage",\) *"[^"]*"|\1 "'"$ddrs"'" |'
Других очевидных проблем здесь нет.(1) Конечное пространство, которое я предполагаю, является преднамеренным; (2) Я полагаю, что |
- довольно безопасный символ, чтобы предположить, что он не будет в URL (содержимое $ ddrs
). Экранирование здесь - это немного кошмар для чтения, но для этого конкретного использования, особенно в sed
, я думаю, что это неизбежно.
Надежность важнее удобочитаемости, хотя к удобочитаемости стоит стремиться там, где она не жертвует надежностью.
Думаю, ваш раздел ESP должен быть смонтирован в /boot/efi
. В списке конфигурации вашего раздела предполагается, что вы, возможно, создаете раздел ESP (/dev/sda2
), но оставляете его несмонтированным.