【问题标题】:Regex to replace last occurrence of a string in each line正则表达式替换每行中最后一次出现的字符串
【发布时间】:2011-09-10 09:51:23
【问题描述】:

我正在使用sed -e 's/\(.*\)ABC/\1DEF/' myfile 将文件中最后出现的ABC 替换为DEF

我想修改它,将文件中每一行中最后出现的ABC替换为DEF

可以用正则表达式吗?

谢谢

【问题讨论】:

  • 文件每一行其实都是sed -e 's/\(.*\)ABC/\1DEF/' will replace last occurrence of ABC`。
  • @anubhava 是对的。事实上,我不确定你是否解释清楚了你在寻找什么。
  • @anubhava i 虽然它只是替换了文件中的最后一次出现,而不是每一行。我可能错了。最后用/g 对其进行了测试,就像建议的那样,效果也很好。
  • 在我的 Ubuntu linux 和 Mac 上使用 /g 标志不需要替换最后出现的 ABC

标签: regex linux shell scripting sed


【解决方案1】:

您需要在 sed 末尾添加“g”:

sed -e 's/\(.*\)ABC/\1DEF/g'

这告诉 sed 替换每一次出现的正则表达式(“全局”),而不是只替换第一次出现。

编辑:您还应该添加一个$,如果您想确保它替换最后一次出现的ABC:

sed -e 's/\(.*\)ABC$/\1DEF/g'

【讨论】:

  • $ 不会保证 ABC 的最后一次出现,但会保证它是一行的结尾。所以,这可能是不必要的。
猜你喜欢
  • 2021-04-29
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多