我希望用斜杠替换所有反斜杠(与 include 指令出现在同一行)。
这是我到目前为止所拥有的..
echo '#include "..\etc\filename\yes"' | sed 's&\(#include.*\)\\&\1\/&g'
这按我预期的那样工作,但问题是它一次只替换一个\...如果我想替换上面文本中的所有三个,我必须运行 sed 命令 3 次...最后的 g 标志应该在全局范围内进行替换,不是吗?
我在 Ubuntu 11.10 上使用 sed 4.2.1...
最佳答案
问题在于您匹配的方式。 .*
是贪婪的,所以它先匹配最后一个反斜杠,然后认为它完成了。试试这个:
... | sed '/^#include/s&\\&/&g'
仅在匹配第一个模式的行上运行替换。
关于regex - sed,替换#include 中的反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7857726/