Iag*_* B. 6 regex parsing hashing parser sha-2
我看到一堆有“.sha256”文件的 FOSS 项目。它们看起来像这样:
dsdfdfdsffdfsdfdsfdsfdsfdsfdsfds23r2ewrefdefdsfdsgfdsgffgfkgdfgg *meow.exe
Asdfdfdsffdfsdfdsfdsfdsfdsfdsfds23r2ewrefdefdsfdsgfdsgffgfkgdfg3 cool_stuff.exe
dsdfdfdsfDdfsdfdsfdsfdsfdsfdsfds23r2ewrefdefdsfdsgfdsgffg3kgdfgg even_more_stuff.exe
Run Code Online (Sandbox Code Playgroud)
我目前通过以下方式得到这些:
#^([A-Za-z0-9]{64})\s+(\S+)$#um
Run Code Online (Sandbox Code Playgroud)
这将匹配dsdfdfdsffdfsdfdsfdsfdsfdsfdsfds23r2ewrefdefdsfdsgfdsgffgfkgdfgg和*meow.exe等。神秘地以星号开头的文件名(我无数次试图查找它,但不知道这意味着什么)被剥夺了它们的开头*。
还有比这更重要的事情吗?如果文件名中包含空格而不是下划线,会发生什么情况?然后我的正则表达式崩溃了。可以引用它们吗?如果是,是使用 Linux(单引号)还是 Windows 风格(双引号)引用?
这种看似简单的文件格式实际上有无数与之相关的问题,但我没有在任何地方看到它的定义。到目前为止,我也没有遇到过使用空格或任何类型的引号的文件名。但他们确实使用星号,显然它也可以出现在文件名的末尾......
应该如何解析这种疯狂,以免有一天崩溃?
文件.sha256是由程序生成的文本文件sha256sum。文件的目的.sha256是使人们能够使用程序检查文件的完整性sha256sum。它的内容不应该由人类手动解释。sha256sum\ 的手册页引用了https://www.gnu.org/software/coreutils/sha256sum,而https://www.gnu.org/software/coreutils/manual/html_node/md5sum-inspiration.html :
\n\n对于每个文件,
\nmd5sum默认输出 MD5 校验和、空格、指示二进制或文本输入模式的标志以及文件名。二进制模式用 表示*,文本模式用(空格)表示。二进制模式是其\xe2\x80\x99 重要的系统上的默认模式,否则文本模式是默认模式。如果没有--zero,如果文件包含反斜杠或换行符,则该行以反斜杠开头,并且文件名中的每个有问题的字符都用反斜杠转义,即使存在任意文件名,输出也不会产生歧义。如果 file 被省略或指定为-,则读取标准输入。
并进一步:
\n\n\n\n
\xe2\x80\x98-c\xe2\x80\x99\n--check\xe2\x80\x99从每个文件(如果未指定文件,则从 stdin)读取文件名和校验和信息(不是数据),并报告校验和是否与指定文件的内容匹配。此模式的输入
\nmd5sum通常是先前生成校验和的运行的输出md5sum。支持三种输入格式。要么是上面描述的默认输出格式,--tag要么是BSD反向模式格式,它与默认模式类似,但不使用字符来区分二进制和文本模式。--zero不支持已启用的输出--check。