0

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

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

输出 : plum)

预期输出:orange) (plum)

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

4

2 回答 2

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

. 匹配任何字符,因此 sed 监视该行中的最后一个括号。因此.数学(^[^(]+\(数学apples (orange) (。因此,您需要按照您的建议使用[^(]*to not match any (

于 2012-06-28T11:21:23.363 回答
1

不能。.* 和 .+ 总是贪婪的。不过,还有其他方法可以做到这一点。

删除所有前导(

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

或者几乎等效而不是真正的改进将使用一个组来保存第二部分。

$ sed 's/[^(]*(\(.*\)$/\1/' <<<'apples (orange) (plum)'
orange) (plum)
于 2012-06-28T11:35:49.057 回答