我有点困惑为什么这不起作用。我正在尝试做一些更复杂的事情,但我的问题的核心归结为匹配单行 C 注释。
示例myfile
:
/* a comment */
跑步:
sed 's|/\*\([.]*\)\*/|\1|' ./myfile
不匹配/替换。
这是为什么?我把它分成几部分,它似乎适用于单独的部分(开头/*
、东西、结尾*/
和组合(开头/中间和中间/结尾),并且一切正常,但把它放在一起却不行。
我错过了什么?
[.]*
正在寻找一串零个或多个点。你想.
成为一个元字符;删除它周围的方括号。
sed 's|/\*\(.*\)\*/|\1|' ./myfile
注意这是一个贪心匹配算法;这就是所有普通(POSIX)版本的sed
支持。代表着:
XX /* comment1 */ YY /* comment2 */ ZZ
将输出:
XX comment1 */ YY /* comment2 ZZ
用经典修复它sed
几乎是不可能的,不值得尝试。如果您的 中支持 PCRE(与 Perl 兼容的正则表达式)sed
,则可以使用非贪婪匹配运算符将其视为两个注释。