我正在尝试使用sha256sum散列命令来散列电子邮件地址。
$ echo -n example@gmail.com | sha256sum | awk '{print $1}'
264e53d93759bde067fd01ef2698f98d1253c730d12f021116f02eebcfa9ace6
现在我想在仅使用email_address的输入文件上应用相同的内容,但是下面显示了一个不同的哈希,看起来CAT是罪魁祸首,让我知道如何克服这个问题。
$ echo -n | cat test.txt | sha256sum | awk '{print $1}'
5c98fab97a397b50d060913638c18f7fd42345248bb973c486b6347232e8013e
理想情况下,我想在下面看看test.txt是否只有一条记录example@gmail.com(它可以有n个电子邮件地址)
example@gmail.com|264e53d93759bde067fd01ef2698f98d1253c730d12f021116f02eebcfa9ace6
答案 0 :(得分:1)
有点不清楚,但我认为你的test.txt
文件看起来像这样:
example@gmail.com rkj@stackoverflow.com sean@stackoverflow.com
你想要产生输出:
example@gmail.com|264e53d93759bde067fd01ef2698f98d1253c730d12f021116f02eebcfa9ace6 rkj@stackoverflow.com|2a583d8e55db9bac7247cac8dc4b52780010583217844e864e159c458ce0185c sean@stackoverflow.com|797f02327b00f12486f2ed5e85e61680ecb75a0f969b54a627e329506aaf595c
如果是这种情况,可以这样做:
while read email; do SHA=$(echo -n $email | sha256sum | awk '{print $1}'); echo "$email|$SHA"; done < test.txt
在初始命令中,您使用的是echo -n
,它打印的参数没有尾随换行符。所以你得到的只是电子邮件地址的哈希值。一旦你开始使用一个文件,每一行都会有一个换行符,所以对于每一行你必须剥离换行符并获得哈希值。这实际上是我建议的解决方案。