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

Mic*_*ael 11 regex linux shell scripting sed

我使用sed -e 's/\(.*\)ABC/\1DEF/' myfile,以取代最后一次出现ABCDEF在一个文件中.

我想修改它来代替最后一次出现ABCDEF每一行的文件中.

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

谢谢

Bac*_*con 5

您需要在sed的末尾添加'g':

sed -e 's/\(.*\)ABC/\1DEF/g'
Run Code Online (Sandbox Code Playgroud)

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

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

sed -e 's/\(.*\)ABC$/\1DEF/g'
Run Code Online (Sandbox Code Playgroud)

  • $不能保证仅最后一次出现ABC,而是可以保证它是行尾。因此,可能是不必要的。 (5认同)