我有点困惑为什么这不起作用。我正在尝试做一些更复杂的事情,但我的问题的核心归结为匹配单行C评论。
示例myfile
:
/* a comment */
运行:
sed 's|/\*\([.]*\)\*/|\1|' ./myfile
不匹配/替换。
为什么?我已将它分成几部分,它似乎适用于各个部分(打开/*
,填充,*/
和组合(开始/中间和中间/结束),这一切都有效,但把它放在一起不会。
我错过了什么?
答案 0 :(得分:2)
[.]*
正在寻找一个零点或多点的字符串。您希望.
成为元字符;删除它周围的方括号。
sed 's|/\*\(.*\)\*/|\1|' ./myfile
请注意,这是一种贪婪的匹配算法;这是sed
支持的所有普通(POSIX)版本。这意味着:
XX /* comment1 */ YY /* comment2 */ ZZ
将输出:
XX comment1 */ YY /* comment2 ZZ
使用经典sed
修复它是不可能的,不值得尝试。如果您在sed
中支持PCRE(Perl兼容正则表达式),则可以使用非贪婪匹配运算符将其视为两条注释。