我误解了 grep 手册中关于 -o (仅匹配)的内容

Lah*_*hor 3 grep

grep手动报价:

\n
\n

-o, --only-matching
\n仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。

\n
\n

matched (non-empty) parts of a matching line意味着非空行,对吧?

\n

更新

\n

如果评论被删除,请参考下面斯蒂芬的回答:

\n
\n
    \n
  • 解释:“一行中的空字符串”而不是“匹配行的空部分”怎么样?\xe2\x80\x93\n拉霍尔\n10 小时前
  • \n
  • 我认为重要的标签是\xe2\x80\x9cmatched parts\xe2\x80\x9d;\xe2\x80\x9cmatched strings\xe2\x80\x9d 也可以工作,我\xe2\x80\x99m 不是问哪个更好的合适人选。\xe2\x80\x93\n斯蒂芬·基特\n59 分钟前
  • \n
\n
\n

Ste*_*itt 16

它实际上指的是匹配行的非空匹配部分,而不是非空行。结果是输出仅包含非空行,每行包含一个非空匹配项

\n

grep -o每场比赛打印一行:

\n
$ grep -Eo '.?' <<<"hello"\nh\ne\nl\nl\no\n
Run Code Online (Sandbox Code Playgroud)\n

但它不\xe2\x80\x99t 输出空匹配。许多正则表达式可以匹配空文本;例如:

\n
$ grep -E '.?' <<<""\n\n
Run Code Online (Sandbox Code Playgroud)\n

输出一个空行,因为空行匹配。然而,添加-o结果根本没有输出:

\n
$ grep -Eo '.?' <<<""\n
Run Code Online (Sandbox Code Playgroud)\n

因为-o忽略空匹配。

\n

指定-o忽略空匹配意味着实现者 don\xe2\x80\x99t 需要决定如何处理零长度匹配,否则在许多情况下会产生相当冗长(且无用)的输出。

\n


αғs*_*нιη 6

考虑这两个命令:

grep -o '^' <<<'1a2b3c'
Run Code Online (Sandbox Code Playgroud)

这不会输出任何内容,因为它与行的开头匹配并且是空的,所以它不会输出它。


grep -o '[abc]' <<<'1a2b3c'
Run Code Online (Sandbox Code Playgroud)

这输出匹配行的匹配(非空)部分,每个这样的部分都在单独的输出行上。

a
b
c
Run Code Online (Sandbox Code Playgroud)