-
最後に追加せずにSHA合計を印刷できますか?
$ echo test | sha1sum
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83 - <--- this "-" dash/hyphen
awk
他のコマンドラインツールを使用できることを知っていますが、他のツールを使わなくてもできますか??
$ echo test | sha1sum | awk '{print $1}'
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83
答え1
sha1sumハッシュの長さは40文字なので、出力をheadコマンドにパイプして最初の40文字を抽出できます。
echo test | sha1sum | head -c 40
答え2
これは他のツールがないか、実際のsha1sumスクリプト/バイナリを編集しないと不可能です。 sha1sum がファイルに入力されると、合計の後にファイル名が印刷されます。 sha1sumがファイルに付属していない場合、またはパイプで使用されている場合。 - 入力がファイルではないことを示すためにプレースホルダとして使用されます。
答え3
Bashには追加のツールはありません。
h=($(echo test | sha1sum )) ;echo $h
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83
または
h=( `echo test | sha1sum` ) ;echo $h
Bashでは、hの「配列」宣言を使用して、タグ付きのマルチインデックス配列を作成します。変数を参照するために$ hを使用して配列を再インデックスすることは、$ {h [0]}と同じです。
基本シェル交換の使用
h=`echo test | sha1sum` ;echo ${h// */}
またはposixシェル(sh、dash、bash)を使用してサフィックスを削除する%
h=`echo test | sha1sum` ;echo ${h%-}
配列の使用はより直感的なオプションですが、機能することもできます。
Base64を追加
xxd + base64を使用して、印刷可能な文字範囲でエントロピーを増やす(ビット数を減らす)ことができます。
h=($(echo test | sha1sum )) ;echo $h|xxd -r -p |base64
ThJDvSLGbnbCup7dwfkTlOV/n4M=
答え4
誰もこれを言及していないことが奇妙に見えますが、「tr」コマンドを使用して出力をトリミングするのが最も簡単であることがわかりました。 bash / perl / python正規表現の内容はありませんが、5分間のインターネット検索なしでは取得できません。
$ echo -n "hello" | sha256sum | tr -d "\n *-"
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824