sed,替换#include中的反斜杠

时间:2011-10-22 05:58:44

标签: regex linux bash scripting sed

我希望用斜杠替换所有反斜杠(与include指令出现在同一行)。

这是我到现在为止所拥有的......

echo '#include "..\etc\filename\yes"' | sed 's&\(#include.*\)\\&\1\/&g'

这可以按照我的预期工作,但问题是它一次只能替换一个\ ...如果我想在上面的文本中替换所有三个,我必须运行sed命令3次...最后的g标志应该全局替换,不是吗?

我在Ubuntu 11.10上使用sed 4.2.1 ...

2 个答案:

答案 0 :(得分:7)

问题在于您的匹配方式。 .*是贪婪的,所以它首先匹配最后一个反斜杠然后认为它已经完成了。试试这个:

... | sed '/^#include/s&\\&/&g'

仅在与第一个模式匹配的行上运行替换。

答案 1 :(得分:2)

你想要一个复合命令 - 第一个模式匹配以#include开头的行,第二个模式匹配斜杠翻译。

sed '/^#include/ s&\\&/&g'