regex - sed,替换#include 中的反斜杠

标签 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...

最佳答案

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

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

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

关于regex - sed,替换#include 中的反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7857726/

相关文章:

java - 需要正则表达式的帮助来提取标签内的数据

regex - 从 Jinja2 中的 URL 中删除尾随/(正则表达式?)

linux - 将值保存到 linux bash do 循环内的变量

javascript - IPV4 地址的正则表达式给出无效响应

Linux加载i2c驱动

Linux grep 和排序日志文件

c++ - 在 Linux 中,如何在父进程死后将子进程留在前台?

java - 使用 bash globing 设置 Java 命令行属性

arrays - 如何使用 BASH 将 tar 命令中的文件读取到数组中?

regex - (ab)+ 有什么区别?和 (ab)+ 当我在 boost :regex? 中使用它时