我目前有一堆具有 md5sum 哈希值的 .md5sum 文件及其对应的文件名和完整的绝对路径。我想将这些文件从绝对路径修改为相对路径。我想我已经很接近了。
> cat example.md5sum
197f76c53d2918764cfa6463b7221dec /example/path/to/file/example.null
> cat example.md5sum | sed 's/( ).*\// \.\//'
197f76c53d2918764cfa6463b7221dec /example/path/to/file/example.null
将正则表达式 ( ).*\/
放入 Notepad++ 返回 /example/path/to/file/
这就是我想要的。将其移至 sed
不会产生相同的匹配项。
如前所述,这里的最终目标如下:
197f76c53d2918764cfa6463b7221dec ./example.null
最佳答案
看起来像是 sed 的工作。
sed -i.bak 's:/.*/:./:' file ...
-i
选项告诉 sed “就地”修改文件,而不是将结果发送到标准输出。使用 s
ubstitute 命令,您可以使用备用分隔符——在本例中,我使用了冒号,因为您要匹配并用作替换的文本包括斜杠。使内容更易于阅读。
我没有费心去匹配路径前的空格,因为在 md5sum 文件中有一个非常可预测的格式。
在试验之前备份您的输入文件。
请注意,这与 shell 无关——您可以在 tcsh 或 bash 或任何其他能够使用选项启动 sed 的程序中运行它。
关于regex - sed 在字符串和最后一次出现的字符之间搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703054/