Ошибка "grub-efi-amd64-signed" при установке Linux

Чтобы меньше возиться с экранированием специальных символов, таких как двойные кавычки ( и $ , если вы его используете ), вы можете просто заключить саму переменную в двойные кавычки, а остальные в одинарные. Пробелов между ними нет.

'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 , я думаю, что это неизбежно.

Надежность важнее удобочитаемости, хотя к удобочитаемости стоит стремиться там, где она не жертвует надежностью.

1
17.09.2018, 17:48
1 ответ

Думаю, ваш раздел ESP должен быть смонтирован в /boot/efi. В списке конфигурации вашего раздела предполагается, что вы, возможно, создаете раздел ESP (/dev/sda2), но оставляете его несмонтированным.

0
28.01.2020, 00:29

Теги

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