2013/11/2 YunQiang Su <wzss...@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

回复