sed,替换#include 中的反斜杠
我希望用斜杠替换所有反斜杠(与包含指令出现在同一行)。
这是我到目前为止所拥有的..
echo '#include "..\etc\filename\yes"' | sed 's&\(#include.*\)\\&\1\/&g'
这按我的预期工作,但问题是它一次只替换一个 \...如果我想替换上面文本中的所有三个,我必须运行 sed 命令 3次...末尾的 g 标志应该在全局范围内进行替换,不是吗?
我在 Ubuntu 11.10 上使用 sed 4.2.1...
I wish to replace all the backslashes (which appear on the same line with an include directive) with slashes.
Here's what I have until now..
echo '#include "..\etc\filename\yes"' | sed 's&\(#include.*\)\\&\1\/&g'
This works as I expect, but the problem is that it replaces only one \ at a time... If I want to replace all three in the above text, I have to run the sed command 3 times... The g flag at the end should make the replacements globally, no?
I'm using sed 4.2.1 on Ubuntu 11.10...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题在于你的匹配方式。
.*
是贪婪的,所以它首先匹配最后一个反斜杠,然后认为完成了。试试这个:仅在与第一个模式匹配的行上运行替换。
The problem is the way you're matching. The
.*
is greedy, so it matches the last backslash first and then thinks it's done. Try this:That runs the substitutions only on lines matching the first pattern.
您需要一个复合命令 - 第一个模式匹配以 #include 开头的行,第二个模式执行斜杠翻译。
You want a compound command - the first pattern matches lines that start with #include, the second does your slash translation.