我有一个由冒号分隔的三个或四个术语的字符串。第二项可以以固定后缀结束。我需要捕获前两个术语,不包括第一个捕获组中的后缀和一个编辑。
以下所有字符串都应该得到a:b
a:b:c
a:b:c:d
a:b-SUFFIX:c
a:b-SUFFIX:c:d
以下表达式适用于包含3个术语但不包含4个术语的情况。
(.*:.*?)(-SUFFIX.*|:.*)
一次编辑是否可行?
答案 0 :(得分:1)
怎么样:
(.*?:.*?)(-SUFFIX.*|:.*)
答案 1 :(得分:1)
试试这个:
$ sed -r 's/([^:]*:[^:]*):.*/\1/; s/-SUFFIX$//' file
a:b
a:b
a:b
a:b
-r
这要求扩展正则表达式语法。
s/([^:]*:[^:]*):.*/\1/
这只保留前两个字段。
s/-SUFFIX$//
如果第二个字段有后缀,请将其删除。
在OSX或其他BSD系统上,请尝试:
sed -E -e 's/([^:]*:[^:]*):.*/\1/' -e 's/-SUFFIX$//' file