我使用 Linux。在数千个配置文件中隐藏着一个讨厌的 ^M(Windows 回车符),我必须找到它,因为它会导致服务器故障。
如何在充满配置文件的目录层次结构中找到 ^M?
我认为我无法在 bash 命令行中输入 ^M。但我在一个名为 m.txt 的文本文件中有它
答案1
grep -r $'\r' *
用于-r
递归搜索和$''
Bash 中的 c 风格转义。
此外,如果你确定它是一个文本文件,那么运行它应该是安全的
tr -d $'\r' < filename
删除\r
文件中的所有内容。
如果您使用的是 GNU sed
,-i
将执行就地编辑,因此您不需要将文件写回:
sed $'s/\r//' -i filename
答案2
当我尝试时,我发现它有点工作了,但打印出来的行是空白的。添加选项:
--color=never
如果您遇到此问题,我认为是颜色突出显示的转义字符干扰了字符\r
。
答案3
如果您的服务器没有 bash shell,另一种方法是使用-f
on 选项grep
,并结合包含 的准备好的文件\r
。
要创建文件:
$ echo -ne '\r' > /tmp/cr --or-- $ printf '\r' > /tmp/cr
$ od -c /tmp/cr
0000000 \r
0000001
实际进行搜索
$ grep -f /tmp/cr *.html *.php *.asp *.whatever
或者你也可以偷懒直接输入 *,
$ grep -f /tmp/cr *
选项on用于指定包含要匹配的模式的文件,每行一个。在本例中只有一个模式。-f filename
grep
答案4
要在行尾字符上使用 grep,我想您必须告诉 grep 该文件是二进制的。
-l
(字母 L)仅用于打印文件名-P
用于 perl 正则表达式(因此\x0d
转换为\r
或^M
)
grep -l --binary -P '\x0d' *