在预告片中附加校验和值

在预告片中附加校验和值

我想将 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

相关内容