grep 查找包含 ^M 的文件(Windows 回车)

Nic*_*oul 82 grep

我使用Linux。在数以千计的配置文件中隐藏着一个讨厌的 ^M(Windows 回车符),我必须找到它,因为它会使服务器出现故障。

如何在充满配置文件的目录层次结构中找到 ^M?

我想我不能在 bash 命令行上输入 ^M 。但我把它放在一个名为 m.txt 的文本文件中

小智 107

grep -r $'\r' *
Run Code Online (Sandbox Code Playgroud)

使用-r递归搜索和$''在猛砸C风格的逃逸。

此外,如果您确定它是一个文本文件,那么运行应该是安全的

tr -d $'\r' < filename
Run Code Online (Sandbox Code Playgroud)

删除\r文件中的所有内容。

如果您使用的是 GNU sed-i将执行就地编辑,因此您无需将文件写回:

sed $'s/\r//' -i filename
Run Code Online (Sandbox Code Playgroud)

  • @Nicolas:您可以通过按 ^V^M 在命令行输入 ^M,但最好使用 `$'\r'`。 (10认同)
  • 在 Cygwin 下,需要 -U 来完成这项工作。-n 会告诉你行号: grep -r -U -n -e $'\r' (5认同)
  • 将 -l 添加到 grep 命令以仅查看文件名。否则你可能会被匹配的线条轰炸。 (5认同)

小智 14

当我尝试时,我可以看出它有点工作,但线条打印为空白。在选项中添加:

--color=never
Run Code Online (Sandbox Code Playgroud)

如果您遇到此问题,我认为是颜色突出显示的转义字符干扰了\r字符。