grep
ищет файл ssh_known_hosts
для строки (или строк), начинающейся с х06
(^
указывает на начало строки в регулярное выражение) и выводит его.
От мужчина ssh-keygen
:
ssh-keygen -l [-f входной_ключевой_файл]
[...]
-l Показать отпечаток указанного файла открытого ключа. Закрытые ключи RSA1
также поддерживаются. Для ключей RSA и DSA ssh-keygen пытается
найти соответствующий файл открытого ключа и распечатать его отпечаток. Если
в сочетании с -v художественное представление ключа в формате ASCII будет sup
поиграл с отпечатком пальца.
Так ssh-keygen -l -f -
считывает ключ из стандартного ввода (то есть из строки, которая была выведена grep
) и выводит свой отпечаток (-
используемое в качестве имени файла указывает на стандартный ввод).
сед
часть самая сложная. Нужно хорошо понимать регулярные выражения, чтобы понять, что они делают.
сед
запускает команду с/узор/замена/
на каждой строке ввода, то есть заменяет шаблон
с замена
и копирует строку в стандартный вывод. Если шаблон
не найден в строке, строка копируется без изменений.
шаблон
сед
ищет это: ^.*\(SHA256:\S\+\).*(\([^)]\+\))
. Конечно, это регулярное выражение.
Его можно разбить следующим образом:
начало строки (^
), за которым следует ноль или более любых символов (.*
), а затем первый группа (часть между \( ... \)
; мы вернемся к деталям позже), за которым следует ноль или более любых символов (.*
), а затем второй группа, который заключен в буквальные скобки (\( ... \))
.
Первая группа SHA256:\S\+
. Это означает буквальную строку SHA256:
, за которым следует один или несколько непробельных символов (\С\+
) - однако следует отметить, что не все сед
реализации будут поддерживать \С
как указание на непробельный символ. Итак, матчи первой группы SHA256:
за которым следуют любые символы, вплоть до первого пробела.
Вторая группа [^)]\+
, то есть один или несколько символов, не равных закрывающей скобке. Учитывая, что вся группа помещается в круглые скобки, второй группе соответствует любая строка, помещенная в круглые скобки, вплоть до закрывающей скобки.
Подводя итог, сед
ищет в строке шаблон, состоящий из SHA256:
плюс любые непробельные символы, а затем любая строка, заключенная в круглые скобки, с чем-либо между ними.
Совпадающий шаблон заменяется на \2: \1
который является текстом, соответствующим второй группе (\2
), двоеточие, пробел и текст, соответствующий первой группе (\1
).
Например, если ssh-keygen
вывод содержит строку типа
начало чего-то SHA256:123456 что-то в середине (текст внутри скобок) что-то в конце
сед
заменит эту строку на
текст внутри скобок: SHA256:123456 конец чего-то
Строки, не содержащие шаблон, не будут изменены.