为什么角色';正则表达式中的s顺序是否影响sed?
tv.txt文件如下所示:为什么角色';正则表达式中的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.
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”,并且仅当]
不存在时才使用。)
在您的示例中:
-这是一个否定字符类,可识别除[^][()]
、[
、]
或(
以外的任何字符,但)
-这是一个否定字符类,可识别除[^[]()]
之外的任何字符,后跟所使用的正则表达式族中的[
符号,以及表示自身的()
]