0

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

示例myfile

/* a comment */

跑步:

sed 's|/\*\([.]*\)\*/|\1|' ./myfile

不匹配/替换。

这是为什么?我把它分成几部分,它似乎适用于单独的部分(开头/*、东西、结尾*/和组合(开头/中间和中间/结尾),并且一切正常,但把它放在一起却不行。

我错过了什么?

4

1 回答 1

2

[.]*正在寻找一串零个或多个点。你想.成为一个元字符;删除它周围的方括号。

sed 's|/\*\(.*\)\*/|\1|' ./myfile

注意这是一个贪心匹配算法;这就是所有普通(POSIX)版本的sed支持。代表着:

XX /* comment1 */ YY /* comment2 */ ZZ

将输出:

XX  comment1 */ YY /* comment2  ZZ

用经典修复它sed几乎是不可能的,不值得尝试。如果您的 中支持 PCRE(与 Perl 兼容的正则表达式)sed,则可以使用非贪婪匹配运算符将其视为两个注释。

于 2012-08-28T02:59:13.483 回答