Я использовал технику, описанную другими на этой странице (SSH в initramfs с параметром ядра IP
для настройки сети )уже несколько лет, чтобы удаленно разблокировать безголовые серверы Ubuntu Linux (12.02, 14.04, 16.04 и 18.04 ).
Я даже зашел так далеко, что разработал программу на Python(разблокировать -удаленную -систему ), которая делает фактическую разблокировку за меня, потому что процесс выполнения этого вручную казался немного хрупким, и я начал бояться перезагрузки своих серверов, поэтому в духе «если это больно, стоит автоматизировать» я закодировал свои знания в Python (, и это действительно значительно упростило регулярные перезагрузки для установки обновлений безопасности ).
С тех пор я решил также поделиться своими личными заметками о шифровании удаленного корневого диска со всем миром. Связанная страница содержит довольно много подробностей о процедуре (, а также некоторые подсказки, которые здесь не упомянуты ), и я намерен поддерживать ее в актуальном состоянии.
grep
по умолчанию использует Posix Basic Regex (BRE
), который не поддерживает вашу нотацию.
Используйте grep -E
для использования расширенного регулярного выражения Posix(ERE
)и grep -P
для использования Perl-совместимого регулярного выражения (PCRE
), если оно доступно.
Ваша нотация работает сgrep -P
:
grep -P '^\s+version:\s+(\d\.\d\.\d)' file.txt
Работает сBRE
:
grep '^ \+version: \+\([0-9]\.[0-9]\.[0-9]\)' file.txt
Выход:
version: 1.2.3
Обратите внимание, что группа захвата здесь не нужна, так как grep
ничего с ней не делает.
Если вам нужен только номер версии, используйте\K
и -o
опцию:
grep -Po '^\s+version:\s+\K\d\.\d\.\d' file.txt
Выход:
1.2.3
С BRE
это невозможно, вам нужно связать две grep
команды:
grep 'version: ' file.txt | grep -o '[0-9]\.[0-9]\.[0-9]'
или используйтеsed
(кредиты @Kusalananda):
sed -n 's/.*version: //p' file.txt
Согласно комментарию pLumo и Как использовать grep для получения чего-либо сразу после имени рабочей командой может быть
grep -oP "(?<=version: )(\d\.\d\.\d)" file.txt