sed,替换#include 中的反斜杠

发布于 2024-12-11 10:54:30 字数 303 浏览 0 评论 0原文

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

这是我到目前为止所拥有的..

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

じ违心 2024-12-18 10:54:30

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

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

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

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:

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

That runs the substitutions only on lines matching the first pattern.

伪装你 2024-12-18 10:54:30

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

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

You want a compound command - the first pattern matches lines that start with #include, the second does your slash translation.

sed '/^#include/ s&\\&/&g'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文