2017-12-06 7 views
1

私はmacOS Sierraを使用していて、ファイル内の各行をsha256にしたい。ファイル内の各行をsha256にする方法は?

ファイル:

test 
example 
sample 

意図した出力:

9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08 
50D858E0985ECC7F60418AAF0CC5AB587F42C2570A884095A9E8CCACD0F6545C 
AF2BDBE1AA9B6EC1E2ADE1D694F41FC71A831D0268E9891562113D8A62ADD1BF 

私はUbuntuの上でこれを行うにはいくつかの方法を発見しましたが、MacがそれにインストールSHA256を持っていないようです。どのような音から、あなたはshasum 256に似た何かを使用する必要がありますが、何も動作していないようです。

答えて

2

openssl dgst(だけでなく、かなり多くの他の場所と)アウトオブボックスのMacOS上で利用可能で、簡単にライン・バイ・ラインを反復するためBashFAQ #1プラクティスと組み合わせることができます。

### INEFFICIENT SOLUTION 
hashlines() { 
    while IFS= read -r line; do 
    printf '%s' "$line" \ 
     | openssl dgst -sha256 \ 
     | tr '[[:lower:]]' '[[:upper:]]' \ 
     | sed -Ee 's/.*=[[:space:]]//' 
    done 
} 

ことこれは、大きなファイルで実行すると非常に非効率的であると述べています。パフォーマンスが良いものが必要な場合は、代わりにPythonで記述します。以下のように見えるかもしれません同じ呼び出し規約と、同じシェル関数に包まれた。いずれの場合も

### FAST SOLUTION 
hashlines() { 
    python -c ' 
import sys, hashlib 
for line in sys.stdin: 
    print(hashlib.sha256(line.rstrip("\n")).hexdigest().upper())' 
} 

、使用量がちょうどhashlines < filenamehashlines <<< $'line one\nline two'です。

関連する問題