我正在尝试使用Perl重新排序md5文件的内容.对于每一行,我想要没有路径的文件名然后是哈希.我提出的最好的命令是:
$ perl -pe 's|^([[:alnum:]]+).*?([^/]+)$|$2 $1|' DCIM.md5
Run Code Online (Sandbox Code Playgroud)
输入文件(DCIM.md5)由md5sumLinux生成.它看起来像这样:
e26ff03dc1bac80226e200c0c63d17a2 ./Path1/IMG_20150201_160548.jpg
01f92572e4c6f2ea42bd904497e4f939 ./Path 2/IMG_20150204_190528.jpg
afce027c977944188b4f97c5dd1bd101 ./Path3/Path 4/IMG_20151011_193008.jpg
Run Code Online (Sandbox Code Playgroud)
([[:alnum:]]+)的.*?.([^/]+).^(这里显然不必要)和$.没有$,表达式不会输出我所期望的.|而不是/作为分隔符来避免在文件路径中转义它.该命令返回:
IMG_20150201_160548.jpg
e26ff03dc1bac80226e200c0c63d17a2IMG_20150204_190528.jpg
01f92572e4c6f2ea42bd904497e4f939IMG_20151011_193008.jpg
afce027c977944188b4f97c5dd1bd101IMG_20151011_195133.jpg
Run Code Online (Sandbox Code Playgroud)
匹配是正确的,输出序列是正确的(文件名没有路径然后哈希)但间距不是:文件名后面有换行符.我希望它在哈希之后,像这样:
IMG_20150201_160548.jpg e26ff03dc1bac80226e200c0c63d17a2
IMG_20150204_190528.jpg 01f92572e4c6f2ea42bd904497e4f939
IMG_20151011_193008.jpg afce027c977944188b4f97c5dd1bd101
Run Code Online (Sandbox Code Playgroud)
在我看来,我的命令输出换行符,但我不知道如何改变这种行为.或者问题可能来自shell,而不是命令?
最后,一些版本信息:
$ perl -version
This is perl 5, version 22, subversion 1 (v5.22.1) built for i686-linux-gnu-thread-multi-64int
(with 69 registered patches, see perl -V for …Run Code Online (Sandbox Code Playgroud)