쉘에서 MD5 해시 결과를 파이프하는 방법


12

결과 md5sum를 다른 명령으로 파이프하는 간단한 방법을 찾고 있습니다 . 이 같은:

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

내 문제는 md5sum문자열의 해시뿐만 아니라 입력이 stdin에서 온 것을 나타내는 하이픈도 출력한다는 것입니다. man 파일을 확인했지만 출력을 제어하는 ​​플래그를 찾지 못했습니다.


4
참고 : echo -n텍스트 데이터를 알 수없는 경우 사용하지 않도록주의하십시오 . printf '%s' "$DATA"대신 사용하십시오 . 달리 echo -n "$DATA",이 때 작동합니다 DATA="-n"(다른 예 중에서).
Stéphane Gimenez

답변:


14

cut 명령을 사용할 수 있습니다 . 모든 입력 행에서 특정 문자 / 바이트 범위를자를 수 있습니다. MD5 해시의 길이는 고정 (32 자)이므로 옵션 -c 1-32을 사용 하여 입력 줄에서 처음 32 자만 유지할 수 있습니다 .

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

또는 cut모든 공간에서 줄을 나누고 첫 번째 필드 만 출력하도록 지시 할 수 있습니다 (공백 문자 주위의 따옴표에주의하십시오)

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

더 많은 옵션에 대해서는 절단 맨 페이지 를 참조하십시오 .


나도 그것에 대해 생각했다! 나중에 -d+로 바꿀 수 -f있도록 +를 선택했습니다 . md5sumsha1sum
Stéphane Gimenez

awk작동 : echo -n test | md5sum | awk -F" " '{print $1}' 또는awk -F" " '{print $1}' <(echo -n test | md5sum)
laebshade

답변 감사합니다. @laebshade 사실, 당신은 printf를 사용해야 만한다. 그렇지 않으면 그것은 끝에 새로운 줄 문자를 출력 할 것이다;)
nmat

@laebshade :에 대한 -F" "옵션 awk은에 대한 기본값이라는 점에서 볼 때 매우 이상합니다 awk.
enzotib

3

당신은 cut할 수 있습니다 :

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

여기에서 -d' '공백을 구분 기호로 선택 -f1하고 구분 기호 앞의 첫 번째 필드를 요청합니다.


2

awk를 사용하면 잘 작동합니다.

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

또 다른 방법은 부분 문자열을 만드는 것입니다. md5 해시는 32 자로 구성된 문자열이므로 다음을 사용할 수 있습니다.

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

문자열 조작 일 뿐이므로 선택의 여지가 있습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.