为什么 grep 在使用‘$’的正则表达式中需要一个点?

为什么 grep 在使用‘$’的正则表达式中需要一个点?

我以为我知道 grep,但可能不知道。

我想找到文件中以 ':' 结尾的所有行,如果我运行

grep :$ ~/greptester.txt

但令我惊讶的是,它没有给出任何结果。有时我会混淆“^”和“$”,不得不猜测哪个是行首,哪个是行尾,但我检查了一下,$ 确实是行尾。

经过一番折腾,我意外地发现运行

grep :.$ ~/greptester.txt

确实给出了预期的结果。为什么?

以下是文本文件:

test line one
1 line with a colon:
ignore this line
3456 some stuff:
cat: meow; dog: bark; horse: four (4) legs.
goat, 7 elephants

这在 Ubuntu 和装有 Cygwin 的 Windows 机器上都会发生。

答案1

您的文件有(CR+LF)行结尾(可能是在 Windows 中创建的?),而大多数 UNIX 文件仅以(LF)\r\n结尾。\n

因此,在 grep 看到字符\n后面之前:\r它必须与通配符匹配.

相关内容