为什么 grep -H 在这里返回奇怪的输出?

为什么 grep -H 在这里返回奇怪的输出?

我对指定文件执行了 grep -H 命令,输出内容是一些奇怪的文件字符串组合,而不是我期望的通常的文件路径和匹配字符串行。我搜索的字符串甚至没有出现在输出中。

为什么会出现这种情况?我首先执行了递归 grep,只有一个文件出现此行为失败。当我执行 grep -l 时,文件路径显示正确。

编辑:cat filename 不包含任何输出。cat -v 显示文件输出,并且文件包含 windows 行尾 (^M)。Emacs 将文件列为 mac 文件,而不是 DOS 文件。运行 mac2unix 命令后,工作正常

答案1

如果文件缺少换行符(即 0x0a、\n、LF 或 ^J),就像正确的 Unix/Linux 文本文件一样,grep 会将其视为一条很长的行。使用不带 '-v' 的 'cat' 会导致回车符(即 0x0d、\r、CR 或 ^M),将终端光标返回到行首,并且根据您的 tty 设置以及最后一行是否为空(即 ^M^M),可能会导致视觉上显示“无任何内容”,因为最后一行内容已被空行清除。在文件上使用 grep 只会进一步混淆正在发生的事情,因为它可能也在与终端玩游戏(特别是如果您使用 --color,因为某些 Linux 发行版默认这样做。)

顺便说一句:Emacs 将其称为“mac”文件和“mac2unix”实用程序都有点过时了。最后一个使用 CR 换行符的 Mac 系统是近 20 年前发布的 Mac OS 9。

相关内容