sed,替换#include中的反斜杠

Adi*_*Adi 2 regex linux bash scripting sed

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

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

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

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

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

Cas*_*bel 7

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

... | sed '/^#include/s&\\&/&g'
Run Code Online (Sandbox Code Playgroud)

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