[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 正则方括号懒惰匹配



2013/11/2 YunQiang Su <wzssyqa@gmail.com>
现在有个字符串比如

  a[amd64, i386], b[linux-any, kfreebsd-any], c[amd64 mipsel, mips64el], d [any]

现在需要将其改为
   a[amd64 i386], b, c, d

规则是
        如果方括号里有 any, linux-any, mips64el 中的一个,
             就把这个方括号及其内容,以及方括号前边的一个空格去掉
        如果方括号内没有 any, linux-any, mips64el, 就保留着

要求:尽量使用 sed/perl/awk 等一行搞定。

--
YunQiang Su

大概是这样吧:
s/\x20?\[   [^\[\]]*?   (any|linux-any|mips64el)  [^\[\]]*?  \]//xg;
(perl的正则表达式)

如果还可能出现freebsd-any之类的的话,这个就有问题,得改成更复杂的:
s/\x20?\[   ( [^\[\]]*?,\s* | )  (any|linux-any|mips64el)  (,\s* [^\[\]]*? | )  \]//xg;

GUO Yixuan

Reply to: