我知道 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. 一旦到达那里,它就会尽可能多地消耗。
| 归档时间: |
|
| 查看次数: |
8777 次 |
| 最近记录: |