带有可选固定字符串的正则表达式

时间:2015-02-22 18:33:23

标签: regex sed

我有一个由冒号分隔的三个或四个术语的字符串。第二项可以以固定后缀结束。我需要捕获前两个术语,不包括第一个捕获组中的后缀和一个编辑。 以下所有字符串都应该得到a:b

的结果
a:b:c
a:b:c:d
a:b-SUFFIX:c
a:b-SUFFIX:c:d

以下表达式适用于包含3个术语但不包含4个术语的情况。

(.*:.*?)(-SUFFIX.*|:.*)

一次编辑是否可行?

2 个答案:

答案 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$//

    如果第二个字段有后缀,请将其删除。

Mac OSX

在OSX或其他BSD系统上,请尝试:

sed -E -e 's/([^:]*:[^:]*):.*/\1/' -e 's/-SUFFIX$//' file