我以为我知道 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
它必须与通配符匹配.
。