grep caută fișierul ssh_known_hosts pentru linia (sau liniile) care încep cu x06 (^ indică un început de rând în a expresie uzuala) și îl emite.
Din om ssh-keygen:
ssh-keygen -l [-f input_keyfile]
[...]
-l Afișează amprenta fișierului cheie publică specificat. Chei private RSA1
sunt de asemenea suportate. Pentru cheile RSA și DSA, ssh-keygen încearcă
găsiți fișierul cheie publică care se potrivește și imprimă amprenta. Dacă
combinat cu -v, o reprezentare artistică ASCII a cheii este sup…
pliat cu amprenta.
Asa de ssh-keygen -l -f - citește cheia de la intrarea standard (adică din linia care a fost scoasă de grep) și își scoate amprenta digitală (- folosit ca nume de fișier indică intrarea standard).
The sed partea este cea mai dificilă. Trebuie să înțelegeți bine expresiile regulate pentru a înțelege ce face.
sed rulează comanda s/model/înlocuire/ pe fiecare linie de intrare, adică înlocuiește model cu înlocuire și copiază linia la ieșirea standard. Dacă model nu se găsește în linie, linia este copiată neschimbată.
The model sed cauta este: ^.*\(SHA256:\S\+\).*(\([^)]\+\)). Este o expresie regulată, desigur.
Poate fi defalcat astfel:
începutul rândului (^), urmat de zero sau mai multe caractere (.*), urmat de primul grup (partea dintre \( ... \); ajungem la detalii mai târziu), urmat de zero sau mai multe caractere (.*), urmat de al doilea grup, care este cuprins între paranteze literale (\( ... \)).
Primul grup este SHA256:\S\+. Aceasta înseamnă un șir literal SHA256:, urmat de unul sau mai multe caractere fără spații (\S\+) - cu toate acestea, trebuie menționat că nu toate sed implementările vor sprijini \S ca o indicație a caracterului non-spațial. Deci primele meciuri din grupă SHA256: urmat de orice caractere, până la primul spațiu.
Al doilea grup este [^)]\+, adică unul sau mai multe caractere care nu sunt egale cu paranteza de închidere. Ținând cont de faptul că întregul grup este pus în paranteză, al doilea grup se potrivește cu orice șir plasat între paranteze, până la paranteza de închidere.
Rezumând, sed caută în linie un model format din SHA256: plus orice caractere non-spațiu, și apoi orice șir plasat în paranteze, cu orice între ele.
Modelul potrivit este înlocuit cu \2: \1 care este textul care se potrivește celui de-al doilea grup (\2), două puncte, spațiu și textul care se potrivește cu primul grup (\1).
De exemplu, dacă ssh-keygen ieșirea conține o linie ca
începe ceva SHA256:123456 mijloc ceva (text în interiorul părintelui) termina ceva
sed va înlocui acea linie cu
text în interiorul părintelui: SHA256:123456 termina ceva
Liniile care nu conțin modelul nu vor fi modificate.