我在 "(" 之后显示所有内容的正则表达式:
echo "apples (orange) (plum)" | sed -re 's/^.+\(//'
输出 : plum)
预期输出:orange) (plum)
如何捕捉第一个出现的字符而不是最后一个?
echo "apples (orange) (plum)" | sed -re 's/^[^(]+\(//'
. 匹配任何字符,因此 sed 监视该行中的最后一个括号。因此.
数学(
和 ^[^(]+\(
数学apples (orange) (
。因此,您需要按照您的建议使用[^(]*
to not match any (
。
不能。.* 和 .+ 总是贪婪的。不过,还有其他方法可以做到这一点。
删除所有前导(
非
$ sed 's/[^(]*(//' <<<'apples (orange) (plum)'
orange) (plum)
或者几乎等效而不是真正的改进将使用一个组来保存第二部分。
$ sed 's/[^(]*(\(.*\)$/\1/' <<<'apples (orange) (plum)'
orange) (plum)