删除括号内每次出现的文本,除非它包含4位数

时间:2015-08-08 18:50:48

标签: bash

我想删除括号内每次出现的文字,除非它包含4位数。

源:

var="7 Days (TEXT) (some.other.text) (10%) (May contain 1000) (2003)"

期望的输出:

7 Days (2003)

非常感谢提前。

1 个答案:

答案 0 :(得分:3)

$ echo "$var" | sed 's/([^)]*[^[:digit:]()][^)]*)//g; s/([^)]\{0,3\})//g; s/([^)]\{5,\})//g'
7 Days     (2003)

工作原理:

  • s/([^)]*[^[:digit:]()][^)]*)//g

    这将删除其中包含非数字的任何带括号的表达式。

  • s/([^)]\{0,3\})//g

    这将删除其中包含3个或更少字符的任何带括号的表达式。

  • s/([^)]\{5,\})//g

    这将删除其中包含5个或更多字符的任何带括号的表达式。