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.