Sed匹配第一个重复出现的角色

时间:2012-06-28 11:13:45

标签: regex bash sed

我的正则表达式显示"之后的所有内容(":

 echo "apples (orange) (plum)" | sed -re 's/^.+\(//' 

输出:plum)

预期输出:orange) (plum)

如何捕捉第一个出现的角色而不是最后一个角色?

2 个答案:

答案 0 :(得分:1)

echo "apples (orange) (plum)" | sed -re 's/^[^(]+\(//'

。匹配任何字符,因此sed监视行中的最后一个括号。 因此.匹配(^[^(]+\(匹配apples (orange) (。 因此,您需要根据建议使用[^(]*根本不匹配任何(

答案 1 :(得分:1)

不能。 。*和。+总是很贪心。还有其他方法可以实现这一目标。

删除所有前导非(

$ sed 's/[^(]*(//' <<<'apples (orange) (plum)'
orange) (plum)

或几乎相当于并且实际上没有改进就是使用组保存第二部分。

$ sed 's/[^(]*(\(.*\)$/\1/' <<<'apples (orange) (plum)'
orange) (plum)