tiếng kêu đang tìm kiếm tập tin ssh_known_hosts cho dòng (hoặc dòng) bắt đầu bằng x06 (^ chỉ ra một sự bắt đầu của dòng trong một biểu hiện thông thường) và xuất nó ra.
Từ người đàn ông ssh-keygen:
ssh-keygen -l [-f input_keyfile]
[…]
-l Hiển thị dấu vân tay của tệp khóa chung được chỉ định. Khóa RSA1 riêng
cũng được hỗ trợ. Đối với các khóa RSA và DSA, ssh-keygen cố gắng
tìm tệp khóa chung phù hợp và in dấu vân tay của nó. Nếu
kết hợp với -v, một biểu diễn nghệ thuật ASCII của khóa là supâ
miệt mài với dấu vân tay.
Cho nên ssh-keygen -l -f - đọc khóa từ đầu vào tiêu chuẩn (nghĩa là từ dòng đã được xuất bởi tiếng kêu) và xuất dấu vân tay của nó (- được sử dụng làm tên tệp cho biết đầu vào tiêu chuẩn).
Các sed phần là khó khăn nhất. Người ta cần hiểu rõ các biểu thức chính quy để hiểu những gì nó làm.
sed chạy lệnh s/mẫu/thay thế/ trên mỗi dòng đầu vào, nghĩa là thay thế mẫu với thay thế và sao chép dòng này sang đầu ra tiêu chuẩn. Nếu mẫu không tìm thấy trong dòng, dòng được sao chép không thay đổi.
Các mẫu sed đang tìm kiếm là: ^.*\(SHA256:\S\+\).*(\([^)]\+\)). Đó là một biểu hiện thường xuyên của khóa học.
Nó có thể được chia nhỏ như sau:
đầu dòng (^), theo sau là 0 hoặc nhiều ký tự bất kỳ (.*), tiếp theo là đầu tiên tập đoàn (phần giữa \( ... \); chúng ta sẽ đi vào chi tiết sau), theo sau là 0 hoặc nhiều hơn bất kỳ ký tự nào (.*), theo sau là thứ hai tập đoàn, được đặt trong dấu ngoặc đơn (\( ... \)).
Nhóm đầu tiên là SHA256:\S\+. Điều này có nghĩa là một chuỗi ký tự SHA256:, theo sau là một hoặc nhiều ký tự không phải khoảng trắng (\S\+) - tuy nhiên, cần lưu ý rằng không phải tất cả sed triển khai sẽ hỗ trợ \S như một dấu hiệu của ký tự không khoảng trắng. Vì vậy, các trận đấu nhóm đầu tiên SHA256: theo sau là bất kỳ ký tự nào, cho đến khoảng trắng đầu tiên.
Nhóm thứ hai là [^)]\+, nghĩa là một hoặc nhiều ký tự không bằng dấu ngoặc đơn đóng. Có tính đến việc toàn bộ nhóm được đặt trong dấu ngoặc đơn, nhóm thứ hai khớp với bất kỳ chuỗi nào được đặt trong dấu ngoặc đơn, cho đến dấu ngoặc đơn đóng.
Tổng hợp, sed tìm kiếm theo dòng cho một mẫu bao gồm SHA256: cộng với bất kỳ ký tự không phải khoảng trắng nào, sau đó là bất kỳ chuỗi nào được đặt trong dấu ngoặc đơn, với bất kỳ ký tự nào ở giữa chúng.
Mẫu phù hợp được thay thế bằng \2: \1 đó là văn bản phù hợp với nhóm thứ hai (\2), dấu hai chấm, dấu cách và văn bản phù hợp với nhóm đầu tiên (\1).
Ví dụ, nếu ssh-keygen đầu ra chứa một dòng như
bắt đầu thứ gì đó SHA256:123456 ở giữa thứ gì đó (văn bản bên trong dấu ngoặc đơn) kết thúc thứ gì đó
sed sẽ thay thế dòng đó bằng
văn bản bên trong dấu ngoặc: SHA256:123456 end something
Các dòng không chứa mẫu sẽ không bị thay đổi.