我的正则表达式显示"之后的所有内容(":
echo "apples (orange) (plum)" | sed -re 's/^.+\(//'
输出:plum)
预期输出:orange) (plum)
如何捕捉第一个出现的角色而不是最后一个角色?
答案 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)