如何将文件中的所有 MD5 哈希小写?

How do I lowercase all MD5 hashes inside of a file?

我正在用更多的上下文和例子来重新post这个问题,因为不可否认我的最后一个 post 很匆忙。我试图找到所有 MD5 哈希值(基于正则表达式)并简单地将它们小写(无论格式如何,也不管线上还有什么)。

我之前 post 回答了一个与小写电子邮件相关的类似问题,这是已解决的答案(也许这可以帮助找到答案)。

sed -e 's/^\([^@]*\)@/\L@/' file

我使用的 MD5 Regex 是:[a-f0-9]{32}

我现在将提供一些示例(每一行都是独一无二的 - 没有固定模式)

输入数据:

fwefwe:few32rfwe:3r2frewg:-::d3ewStack:D077F244DEF8A70E5EA758BD8352FCD8
fwefwe:few33rfwe:3r2frewg:-::dsasaewStack:06D80EB0C50B49A509B49F2424E8C805
fwefwe:few34rfwe:3r2f3213ef::2d3ewStack:F1BDF5ED1D7AD7EDE4E3809BD35644B0
fwefwe:few35rf32re4frewgre3frewg:-::d3ewStack:DDE2C7AD63AD86D6A18DE781205D194F

输出数据:

fwefwe:few32rfwe:3r2frewg:-::d3ewStack:d077f244def8a70e5ea758bd8352fcd8
fwefwe:few33rfwe:3r2frewg:-::dsasaewStack:06d80eb0c50b49a509b49f2424e8c805
fwefwe:few34rfwe:3r2f3213ef::2d3ewStack:f1bdf5ed1d7ad7ede4e3809bd35644b0
fwefwe:few35rf32re4frewgre3frewg:-::d3ewStack:dde2c7ad63ad86d6a18de781205d194f

您的操作方式与将电子邮件小写时的操作方式相同。使用正则表达式匹配行的一部分,然后在替换中使用反向引用来提取它。

sed -e 's/[a-fA-F0-9]\{32\}/\L&/' file

在替换中,& 被替换为与正则表达式匹配的任何内容,\L 将其小写。

您可以使用

sed -E 's/[A-F0-9]{32}/\L&/g' file

如果您还想修改现有文件,请添加 -i 选项:

sed -i -E 's/[A-F0-9]{32}/\L&/g' file

重点是您需要使用 -E 选项来启用 POSIX ERE 正则表达式语法并在不转义的情况下编写 {...} 量词。 POSIX BRE 等效项看起来像 sed -i 's/[A-F0-9]\{32\}/\L&/g' file

此外,我添加了 g 标志来修改一行中的 所有 匹配项。