Regex 基于C样式(单行)注释的Sed替换

Regex 基于C样式(单行)注释的Sed替换,regex,sed,Regex,Sed,我有点困惑,为什么这不起作用。我试图做一些更复杂的事情,但我的问题的核心归结为匹配一行C注释 示例myfile: /* a comment */ 运行: sed 's|/\*\([.]*\)\*/|\1|' ./myfile 不匹配/替换 为什么呢?我把它分成了几个部分,似乎对各个部分都有效(开始/*,填充,结束*/,以及组合(开始/中间和中间/结束),所有这些都有效,但把它们放在一起就不行了 我缺少什么?该[.]*正在查找由零个或多个点组成的字符串。如果希望为元字符,请删除其周围的方括号

我有点困惑,为什么这不起作用。我试图做一些更复杂的事情,但我的问题的核心归结为匹配一行C注释

示例
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。这是一个学习练习,而不是任何足够健壮的操作。不过,感谢您的帮助,这让我发疯了。