我希望用斜杠替换所有反斜杠(与include指令出现在同一行)。
这是我到现在为止所拥有的......
echo '#include "..\etc\filename\yes"' | sed 's&\(#include.*\)\\&\1\/&g'
这可以按照我的预期工作,但问题是它一次只能替换一个\ ...如果我想在上面的文本中替换所有三个,我必须运行sed命令3次...最后的g标志应该全局替换,不是吗?
我在Ubuntu 11.10上使用sed 4.2.1 ...
答案 0 :(得分:7)
问题在于您的匹配方式。 .*
是贪婪的,所以它首先匹配最后一个反斜杠然后认为它已经完成了。试试这个:
... | sed '/^#include/s&\\&/&g'
仅在与第一个模式匹配的行上运行替换。
答案 1 :(得分:2)
你想要一个复合命令 - 第一个模式匹配以#include开头的行,第二个模式匹配斜杠翻译。
sed '/^#include/ s&\\&/&g'