Вы пытались создать два системных раздела EFI, также называемых ESP, НЕ два раздела /boot.
У вас может быть только один из них.
Было бы безопасно указать вашему установщику на существующий ESP и добавить запись в grub для загрузки обеих ОС из grub в вашей установке Leap 15, используя что-то вроде того, что сделал этот парень:
https://www.garron.me/en/linux/os-prober-update-grub-arch-linux-debian-ubuntu.html
Давайте разберемся. Прежде всего, обратите внимание, что это RegExp использует синтаксис «Расширенное регулярное выражение» (ERE)-+
— это метасимвол, который не работает в синтаксисе «Основного регулярного выражения», который grep
использует по умолчанию (, что означает, что он будет соответствовать самому себе и потребует литерал +
в этой позиции ), поэтому, если вы хотите использовать это регулярное выражение с grep
, вам нужно будет передать -E
вариант.
^
— это якорь, который связывает эту позицию регулярного выражения с началом строки. [0-9]
представляет собой список символов и будет соответствовать любому одиночному(1)символу, попадающему в диапазон сортировки между 0
и 9
. Что именно это включает, зависит от «порядка сопоставления», определяемого, среди прочего, переменной окружения LC_COLLATE
. .
соответствует любому одиночному символу, поэтому два ..
означают «любые два символа». [a-zA-Z]
снова является списком символов и будет соответствовать символам(1 ), которые попадают между a
и z
и, кроме того, попадают между A
и Z
. Опять же, что это означает, зависит от порядка сортировки! +
означает «один или несколько предыдущих» $
— это якорь, который связывает эту позицию регулярного выражения с концом строки. Таким образом, ваше регулярное выражение предназначено для(1)соответствия любым строкам, которые
(1)о том, что он может делать на самом деле, см. ниже
Некоторые примечания
В вашем примере вы используете регулярное выражение без кавычек. Это означает, что любые символы открыты для интерпретации оболочкой до того, как они будут переданы команде grep
. Если ваш шаблон содержит $
или подстановочные символы (*
,Списки символов ?
и [...]
! ), оболочка может попытаться выполнить раскрытие переменной (, заменив таким образом части вашего регулярного выражения )или расширить шаблоны подстановки, возможно, до нескольких имен файлов, чтобы в итоге у вас было больше аргументов в строке команды -что вы изначально задумали. Другие специальные символы оболочки (>
, #
, ;
и т.п. )могут привести к еще более неожиданному поведению. Вы должны использовать
grep -E '^[0-9]..[a-zA-Z]+$' filename.txt
вместо этого. Обратите внимание, что вы можете избавиться от открывающих и закрывающих якорей, используя флаг -x
для обеспечения соответствия «целой строки -» :
grep -x -E '[0-9]..[a-zA-Z]+' filename.txt
Списки символов, содержащие диапазоны (, такие как a-z
), опасны, потому что они могут дать вам не то, что вы думаете. Наивно можно было бы ожидать, что они будут соответствовать всем символам, расположенным между начальным и конечным символом в таблице ASCII, но это верно только для локали C
. В других локалях (и, в частности, в обычно установленных системных локалях, таких как en_US.UTF-8
), порядок сопоставления примерно такой, как aAbB... zZ
, поэтому a-z
также будет соответствовать большинству букв верхнего -регистра. Кроме того, совпадение на самом деле не на уровне отдельных символов, а на уровне «элементов сопоставления», что означает, что в некоторых локалях дажекомбинации нескольких буквмогут соответствовать (, например. dzs
на венгерском языке )! См. этот ответ(или, вообще, большинство ответов @Stéphane Chazelas о сопоставлении с образцом )для получения дополнительной информации. Если вы хотите убедиться, что ваши диапазоны работают, установите порядок сортировки по крайней мере для данной команды через
LC_COLLATE="C" grep -E '... ' filename.txt