regex - sed 在字符串和最后一次出现的字符之间搜索和替换

标签 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

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

如前所述,这里的最终目标如下:

197f76c53d2918764cfa6463b7221dec  ./example.null

最佳答案

看起来像是 sed 的工作。

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

-i 选项告诉 sed “就地”修改文件,而不是将结果发送到标准输出。使用 substitute 命令,您可以使用备用分隔符——在本例中,我使用了冒号,因为您要匹配并用作替换的文本包括斜杠。使内容更易于阅读。

我没有费心去匹配路径前的空格,因为在 md5sum 文件中有一个非常可预测的格式。

在试验之前备份您的输入文件。

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

关于regex - sed 在字符串和最后一次出现的字符之间搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703054/

相关文章:

bash - 从命令行查找和替换多行文本

r - 如何在正则表达式中说 (\w+\W+) 乘以 4 (R gsub)

java - 正则表达式匹配字符串并排除其他所有内容,直到出现新行

regex - 如何查找名称中带方括号的文件

regex - sed 模式似乎不匹配/替换

regex - Bash sed - 在字符串中查找主题标签

java - Android:正则表达式 matcher.find() 的问题始终返回 false

MySQL REGEXP 字母和数字,但没有仅包含数字的记录

linux - 如何在 UNIX 中将 .txt 文件转换为 .xls 文件?

linux - 使用linux grep命令或任何命令从excel文件中检索列标题