ter*_*don 9 grep text-processing pcre
我在另一个网站上找到了一个建议的答案grep -oP '^\w+|$
。我指出|$
在 PCRE 中是没有意义的,因为它只是意味着“或行尾”,因此对于常规行总是如此。但是,grep
当与-o
. 考虑以下:
$ printf 'ab\na\nc\n\n' | perl -ne 'print if /ab|$/'
ab
a
c
$
Run Code Online (Sandbox Code Playgroud)
(我包含第二个提示 ( $
) 字符以显示结果中包含空行)。
正如预期的那样,在 Perl 中,这将匹配每一行。可能是因为它包含一个ab
或因为$
该行的末尾匹配。GNU 的grep
行为与没有-o
标志的方式相同:
$ printf 'ab\na\nc\n\n' | grep -P 'ab|$'
ab
a
c
$
Run Code Online (Sandbox Code Playgroud)
但是,-o
改变了行为:
$ printf 'ab\na\nc\n\n' | grep -oP 'ab|$'
ab
$
Run Code Online (Sandbox Code Playgroud)
这与简单地搜索ab
. 第二部分,“OR 行尾”似乎被忽略了。在没有-o
标志的情况下,它确实按预期工作:
这是怎么回事?是否o
忽略 0 长度匹配?这是一个错误还是预期的?
jes*_*e_b 10
我的 GNU grep 手册页说明如下:
-o, --only-matching
只打印匹配行的匹配(非空)部分,每个这样的部分在单独的输出行上。
重点是我的
我猜它认为行尾匹配是“空匹配”