Làm thế nào để ống md5 băm kết quả trong vỏ


12

Tôi đang tìm kiếm một cách đơn giản để dẫn kết quả của md5summột lệnh khác. Một cái gì đó như thế này:

$echo -n 'test' | md5sum | ...

Vấn đề của tôi là md5sumđầu ra không chỉ là hàm băm của chuỗi, mà còn là một hypen, chỉ ra rằng đầu vào đến từ stdin. Tôi đã kiểm tra tập tin người đàn ông và tôi không tìm thấy bất kỳ cờ nào để kiểm soát đầu ra.


4
Lưu ý: cẩn thận không sử dụng echo -nkhi dữ liệu văn bản không xác định. Sử dụng printf '%s' "$DATA"thay thế. Không giống như echo -n "$DATA", nó sẽ hoạt động khi DATA="-n"(trong số các ví dụ khác).
Stéphane Gimenez

Câu trả lời:


14

Bạn có thể sử dụng lệnh cắt ; nó cho phép bạn cắt một phạm vi ký tự / byte nhất định từ mỗi dòng đầu vào. Vì hàm băm MD5 có độ dài cố định (32 ký tự), bạn có thể sử dụng tùy chọn-c 1-32 để chỉ giữ 32 ký tự đầu tiên từ dòng đầu vào:

echo -n test | md5sum | cut -c 1-32

Ngoài ra, bạn có thể nói cut cầu phân chia dòng ở mọi không gian và chỉ xuất ra trường đầu tiên: (lưu ý các trích dẫn xung quanh ký tự khoảng trắng)

echo -n test | md5sum | cut -d " " -f 1

Xem trang cắt giảm để có thêm lựa chọn.


Tôi cũng nghĩ về điều đó! Tôi đã chọn -d+ -fđể md5sumcó thể thay thế bằng sha1sumhoặc bất cứ điều gì sau này.
Stéphane Gimenez

awkhoạt động quá: echo -n test | md5sum | awk -F" " '{print $1}' hoặcawk -F" " '{print $1}' <(echo -n test | md5sum)
laebshade

Cảm ơn bạn đã trả lời. @laebshade Trên thực tế, bạn phải sử dụng printf nếu không nó sẽ xuất ra một ký tự dòng mới ở cuối;)
nmat

@laebshade: -F" "tùy chọn awkrất lạ để xem, với điều kiện đó là mặc định cho awk.
enzotib

3

Bạn có thể cutnó:

echo -n 'test' | md5sum | cut -d' ' -f1

Ở đây, -d' 'chọn không gian làm dấu phân cách và -f1yêu cầu trường đầu tiên (trước dấu phân cách).


2

Sử dụng awk cũng hoạt động tốt:

echo -n 'test' | md5sum | awk '{print $1}'

Một cách khác là tạo một chuỗi con. Vì bạn biết băm md5 là một chuỗi có 32 ký tự, bạn có thể sử dụng:

HASH=$(echo -n 'test' | md5sum -) && echo ${HASH:0:32}

Đó chỉ là thao tác chuỗi, vì vậy bạn có sự lựa chọn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.