为什么角色';正则表达式中的s顺序是否影响sed?

为什么角色';正则表达式中的s顺序是否影响sed?,sed,regex-group,Sed,Regex Group,tv.txt文件如下所示: mms://live21.gztv.com/gztv_gz 广州台[可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3] mms://live21.gztv.com/gztv_news 广州新闻台·直播广州(可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3) mms://live21.gztv.com/gztv_kids 广州少儿台(可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3) mms://live21.

tv.txt文件如下所示:

mms://live21.gztv.com/gztv_gz 广州台[可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3]
mms://live21.gztv.com/gztv_news 广州新闻台·直播广州(可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3)
mms://live21.gztv.com/gztv_kids 广州少儿台(可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3)
mms://live21.gztv.com/gztv_econ 广州经济台
我想把它分成三组

sed -r 's/([^ ]*)\s([^][()]*)((\(.+\))*|(\[.+\])*)/\3/'  tv.txt 
结果是:

[可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3]    
(可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3)    
(可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3)   
当我把它写进

sed -r 's/([^ ]*)\s([^][()]*)((\(.+\))*|(\[.+\])*)/\3/'  tv.txt   
它不能工作

唯一的区别是
[^][()]
[^[]()]
;两个转义字符都不能使其正常运行

我想知道原因。

]
进入角色类的规则有点晦涩难懂,但仔细想想,它们是有道理的

对于正(非反)字符类,
]
必须是第一个字符:

[]and]
这会将任何字符
a
n
d
]
识别为字符类的一部分

对于否定字符类,
]
必须是
^
后面的第一个字符:

[^]and]
这将识别除
a
n
d
]
以外的任何字符作为字符类的一部分

否则,在
[
之后的第一个
]
标志着字符类的结束。在字符类中,大多数普通正则表达式特殊字符失去其特殊含义,而其他字符(尤其是
-
减号)获得特殊含义。(如果要在字符类中使用
-
,则必须是“first”或“last”,其中“first”表示可选
^
之后的“first”,并且仅当
]
不存在时才使用。)

在您的示例中:

  • [^][()]
    -这是一个否定字符类,可识别除
    [
    ]
    以外的任何字符,但
  • [^[]()]
    -这是一个否定字符类,可识别除
    [
    之外的任何字符,后跟所使用的正则表达式族中的
    ()
    符号,以及表示自身的
    ]