每行替换字符串中最后一个出现的字符串的正则表达式

11

我正在使用sed -e 's/\(.*\)ABC/\1DEF/' myfile命令替换一个文件中最后一次出现的ABCDEF

我想修改它,以在文件的每行中替换最后一次出现的ABCDEF

是否可以使用正则表达式实现?

谢谢


2
实际上,sed -e 's/\(.*\)ABC/\1DEF/' 将替换文件中每行的最后一个出现的 ABC - anubhava
@anubhava是正确的。实际上,我不确定你是否清楚地解释了你正在寻找什么。 - brandizzi
@anubhava 我原本以为它只会替换文件中的最后一个出现的,而不是每一行都替换。我可能错了。我尝试了在结尾加上 /g 像建议的那样,结果也可以工作。 - Michael
在我的Ubuntu Linux和Mac上,不需要使用/g标志来替换最后一次出现的ABC - anubhava
1个回答

5
您需要在sed命令的末尾添加'g':
sed -e 's/\(.*\)ABC/\1DEF/g'

这告诉sed替换每个正则表达式的出现(“全局”),而不仅仅是第一个出现。 编辑: 如果您想确保替换行中最后一次出现的ABC,则还应添加$
sed -e 's/\(.*\)ABC$/\1DEF/g'

5
$ 不仅仅保证 ABC 最后出现,还保证其出现在行末。因此,它可能是不必要的。 - Kiril Kirov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接