为什么在这种简单情况下sed不贪婪?


11
$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5

为什么没有输出65?sed不应该贪婪地匹配[0-9]\+零件吗?我如何告诉sed匹配所有内容65

Answers:


13

首先.*是贪婪的-它是匹配的foo 6。它在那里停止的唯一原因是,进一步进行匹配将阻止整个模式的匹配,因此将其5保留为([0-9]+)。如果您成功了([0-9]*).*它将与整行匹配,您的团队将一无所获。解决这个问题的一种方法是告诉第一部分不匹配数字:

$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.