Regex 基于C样式(单行)注释的Sed替换
我有点困惑,为什么这不起作用。我试图做一些更复杂的事情,但我的问题的核心归结为匹配一行C注释 示例Regex 基于C样式(单行)注释的Sed替换,regex,sed,Regex,Sed,我有点困惑,为什么这不起作用。我试图做一些更复杂的事情,但我的问题的核心归结为匹配一行C注释 示例myfile: /* a comment */ 运行: sed 's|/\*\([.]*\)\*/|\1|' ./myfile 不匹配/替换 为什么呢?我把它分成了几个部分,似乎对各个部分都有效(开始/*,填充,结束*/,以及组合(开始/中间和中间/结束),所有这些都有效,但把它们放在一起就不行了 我缺少什么?该[.]*正在查找由零个或多个点组成的字符串。如果希望为元字符,请删除其周围的方括号
myfile
:
/* a comment */
运行:
sed 's|/\*\([.]*\)\*/|\1|' ./myfile
不匹配/替换
为什么呢?我把它分成了几个部分,似乎对各个部分都有效(开始/*
,填充,结束*/
,以及组合(开始/中间和中间/结束),所有这些都有效,但把它们放在一起就不行了
我缺少什么?该
[.]*
正在查找由零个或多个点组成的字符串。如果希望
为元字符,请删除其周围的方括号
sed 's|/\*\(.*\)\*/|\1|' ./myfile
请注意,这是一种贪婪匹配算法;sed
的纯普通(POSIX)版本都支持这种算法。这意味着:
XX /* comment1 */ YY /* comment2 */ ZZ
将输出:
XX comment1 */ YY /* comment2 ZZ
用classic
sed
修复这个问题几乎是不可能的,不值得尝试支持在您的sed
中,您可以使用非贪婪匹配运算符将其视为两条注释。谢谢Jonathan。这是一个学习练习,而不是任何足够健壮的操作。不过,感谢您的帮助,这让我发疯了。