シェルでmd5ハッシュ結果をパイプする方法


12

結果md5sumを別のコマンドにパイプする簡単な方法を探しています。このようなもの:

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

私の問題はmd5sum、文字列のハッシュだけでなく、入力が標準入力からのものであることを示すハイペンも出力することです。manファイルをチェックしましたが、出力を制御するフラグが見つかりませんでした。


4
注:echo -nテキストデータが不明な場合は使用しないように注意してください。printf '%s' "$DATA"代わりに使用してください。とは異なりecho -n "$DATA"DATA="-n"(他の例の中でも)動作します。
ステファンギメネス

回答:


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ので、後でmd5sum置き換えることができますsha1sum
ステファンギメネス

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.