小编rap*_*h82的帖子

s ///返回不合适的换行符

我正在尝试使用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)
  1. 散列是由第一组匹配([[:alnum:]]+)
    正则表达式.
  2. 然后空格和文件的路径
    匹配.*?.
  3. 然后文件名匹配([^/]+).
  4. 表达式附有^(这里显然不必要)和$.没有$,表达式不会输出我所期望的.
  5. 我使用|而不是/作为分隔符来避免在文件路径中转义它.

该命令返回:

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)

regex perl newline

2
推荐指数
1
解决办法
102
查看次数

标签 统计

newline ×1

perl ×1

regex ×1