sed搜索并替换字符串和最后一次出现的字符

时间:2016-02-29 15:17:26

标签: regex linux sed

我目前有一堆带有md5sum哈希值的.md5sum文件,它的相应文件名带有完整的绝对路径。我想将这些文件从绝对路径修改为相对文件。我想我已经非常接近了。

> cat example.md5sum
197f76c53d2918764cfa6463b7221dec  /example/path/to/file/example.null
> cat example.md5sum | sed 's/(  ).*\//  \.\//'
197f76c53d2918764cfa6463b7221dec  /example/path/to/file/example.null

将正则表达式( ).*\/扔进记事本++会返回/example/path/to/file/这就是我想要的。将其移至sed不会产生相同的匹配。

如前所述,最终目标如下:

197f76c53d2918764cfa6463b7221dec  ./example.null

1 个答案:

答案 0 :(得分:2)

看起来像是sed的工作。

sed -i.bak 's:/.*/:./:' file ...

-i选项告诉sed修改文件"就地"而不是将结果发送到stdout。使用s ubstitute命令,您可以使用备用分隔符 - 在这种情况下,我使用了冒号,因为您匹配并用作替换的文本包括斜杠。使事情更容易阅读。

我还没有打算在路径之前匹配空白,因为在md5sum文件中有一个非常可预测的格式。

在试验前备份输入文件。

请注意,这与shell无关 - 您可以在tcsh或bash或其他任何能够使用选项启动sed的地方运行它。