我正在使用macOS Sierra,并希望sha256文件中的每一行。
文件:
test
example
sample
预期输出:
9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08
50D858E0985ECC7F60418AAF0CC5AB587F42C2570A884095A9E8CCACD0F6545C
AF2BDBE1AA9B6EC1E2ADE1D694F41FC71A831D0268E9891562113D8A62ADD1BF
我在Ubuntu上找到了一些方法,但Mac上似乎没有安装sha256。听起来,你必须使用与shasum 256
类似的东西,但似乎没有任何效果。
答案 0 :(得分:2)
openssl dgst
可以在MacOS上开箱即用(几乎在其他任何地方都可以使用),并且可以轻松地与BashFAQ #1实践结合使用,逐行迭代:< / p>
### INEFFICIENT SOLUTION
hashlines() {
while IFS= read -r line; do
printf '%s' "$line" \
| openssl dgst -sha256 \
| tr '[[:lower:]]' '[[:upper:]]' \
| sed -Ee 's/.*=[[:space:]]//'
done
}
也就是说,在大文件上运行时效率非常低。如果你需要表现良好的东西,我会用Python写这个。包含在相同的shell函数中,具有相同的调用约定,可能如下所示:
### FAST SOLUTION
hashlines() {
python -c '
import sys, hashlib
for line in sys.stdin:
print(hashlib.sha256(line.rstrip("\n")).hexdigest().upper())'
}
在任何一种情况下,使用情况只是hashlines < filename
或hashlines <<< $'line one\nline two'
。