Проблема в том, что микропрограмма EFI на вашем компьютере не может найти системный раздел EFI (ESP ). Желательно, чтобы ваш диск был разбит на разделы по схеме разделов GPT. Спецификация UEFI позволяет использовать схему разделов MBR/DOS, но тогда ESP должен быть основным разделом, иметь правильный тип и иметь установленный загрузочный флаг. См. также этот вопрос U&L .
В вашем файле семь строк, но вы хотите подсчитать строки, которые не являются -пустыми и не начинаются с #
.
$ grep -c '^[^#]' file
5
Подсчитывается количество строк, содержащих в начале символ, не являющийся символом #
.
Выражение [^#]
соответствует одному символу, отличному от #
. Полное выражение ^[^#]
соответствует не-#
в начале строки.
Пустые строки не соответствуют этому выражению, как и строки, начинающиеся с #
¹.
Если вы просто хотите подсчитать не -пустые строки:
$ grep -c '.' file
6
Подсчитываются строки, содержащие хотя бы один символ.
Для полноты подсчет пустых строк:
$ grep -c -v '.' file
1
Для подсчета строк, которые пусты или начинаются с#
:
$ grep -c -v '^[^#]' file
2
Обратите внимание, что параметры -c
и -v
являются «глобальными». Они изменяют поведение всей операции grep
, когда они задаются в командной строке. Нет смысла указывать -c
или -v
несколько раз, и они не принимают аргументы опции -.
Также обратите внимание, что если вы укажете шаблон или регулярное выражение в любом другом месте, кроме как в качестве первого аргумента после всех опций, используйте -e 'pattern'
, чтобы grep
знал, что это шаблон, по которому вы ищете. То есть используйте либо
grep -e '.' -c -v file
или
grep -c -e '.' -v file
или
grep -c -v '.' file
GNU grep
переупорядочивает командную строку таким образом, чтобы опции стояли перед операндами пути (, если POSIXLY_CORRECT
не установлено в среде ),но обычно вы хотите написать переносимый код оболочки, который работает с любой реализацией grep
.
¹ строки, начинающиеся с символа, отличного от -(— последовательность байтов, которая не является допустимым символом в шармапе локали пользователя ), также будут исключены в большинстве grep
реализаций. Вы можете использовать LC_ALL=C grep
, чтобы обойти это. Это должно быть правильно, так как #
является частью переносимого набора символов, поэтому он должен быть инвариантным для разных локалей в данной системе.