我想将 SHA256 校验和哈希值附加到文件的预告片记录
file1.txt
H this is a test
D 1
D 2
D 3
T checksum
使用以下命令获取 64 位字母数字哈希值
sha256sum file1.txt >file2.txt
file2.txt
<64digituniquealphanumvalue> file1.txt
我预期的输出文件是
file3.txt
H this is a test
D 1
D 2
D 3
T checksum <64digituniquealphanum>
但我使用以下命令得到了以下输出
cat file1.txt file2.txt > file3.txt
file3.txt
H this is a test
D 1
D 2
D 3
T checksum
<64digituniquealphanum> file1.txt
file1
有一个新行,我的要求是在 T 记录类型中附加 64 位唯一校验和哈希值,该记录类型是 unix 中文件的最后一行,而没有按预期文件格式给出的文件名。请告诉我如何在unix中实现它的命令
答案1
sed "s/^T checksum$/& $(sha256sum file1.txt | awk '{print $1}')/" file1.txt
此sed
命令匹配仅包含“T checksum”的行file1.txt
,然后在其后面附加一个空格,后跟 的 sha256 摘要file1.txt
。
给定你的file1.txt
,它将输出:
H this is a test
D 1
D 2
D 3
T checksum 521967963f10f7f980c96ee7dfc832035d5fff252b134958add8a323023364d5
请注意,如果“T checksum”行中file1.txt
有任何事物否则(即,额外的空格或其他),它将与^T checksum$
模式不匹配,并且不会附加任何内容。
答案2
sed
“ ”命令e
并非在所有版本上都可用,这里在 linux 上使用sed (GNU sed) 4.7
,尝试一下
sed -e '$ { h;s/.*/sha256sum file/; e ' -e '; s/ .*$//; H; x; s/\n/ /}' file
H this is a test
D 1
D 2
D 3
T checksum 0ad6aaad4fea8e27b8c270191a43e1f8f12113e7b9dc34fecd7fcee053b42604
最后一行被保存到保存空间,然后sha256sum
在输入文件上执行并附加到保存空间,然后交换到模式空间,<NL>
删除字符并打印。
请注意,附加到文件后,未来的校验和验证将失败。
在您file2
可用的情况下,尝试
sed '1{s/ .*$//; h; d; }; ${G; s/\n/ /}' file2 file1