sed 在匹配模式中有多贪婪?

bor*_*der 9 sed

我知道 sed 在匹配模式时很贪婪。但是,它有多贪婪?

考虑这些例子。

$ echo 'foobar123' | sed 's/[0-9]*/(&)/'
()foobar123
$ echo 'foobar123' | sed 's/[0-9][0-9]*/(&)/'
foobar(123)
Run Code Online (Sandbox Code Playgroud)

为什么第二个示例不打印foobar(1)23而是打印foobar(123)

pet*_*eth 12

它尽其所能地贪婪。

第一个模式(“任何数字零次或多次”)在任何地方都匹配,但在您的示例中只匹配一次,因为没有g标志。

相比:

$ echo foobar123 | sed 's/[0-9]*/(&)/g'
()f()o()o()b()a()r(123)
Run Code Online (Sandbox Code Playgroud)

请注意它是如何尽快变得贪婪的,即,可以消耗大于零的数字。

第二个模式也是如此(“任何一位数字,加上任何数字零次或多次”)。它不能匹配123. 一旦到达那里,它就会尽可能多地消耗。