11 $echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p' 5 为什么没有输出65?sed不应该贪婪地匹配[0-9]\+零件吗?我如何告诉sed匹配所有内容65? sed regular-expression — 科里·克莱因 source
13 首先.*是贪婪的-它是匹配的foo 6。它在那里停止的唯一原因是,进一步进行匹配将阻止整个模式的匹配,因此将其5保留为([0-9]+)。如果您成功了([0-9]*),.*它将与整行匹配,您的团队将一无所获。解决这个问题的一种方法是告诉第一部分不匹配数字: $ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p' 65 — 迈克尔Mrozek source