Answers:
grep -r $'\r' *
使用-r
递归搜索和$''
在猛砸C风格的逃逸。
更多,如果您确定它是文本文件,则应该可以安全运行
tr -d $'\r' < filename
删除\r
文件中的所有内容。
如果使用GNU sed
,则-i
可以执行就地编辑,因此您无需回写:
sed $'s/\r//' -i filename
$'\r'
。
$'
了manpage的第一篇文章bash(1)
,基本上,您可以看到它就像在编写C文字字符串一样。至于command < filename
使用<
或>
称为重定向,这是我第一次看到有人称其为更大的表达。REDIRECTION
在中搜寻bash(1)
。
如果您的服务器没有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 *
该选项在用于指定包含模式来匹配,每行一个文件。在这种情况下,只有一种模式。-f filename
grep
在正则表达式样式中,各种换行符:
Windows(CR LF)
\r\n
Unix(LF)
\n
由于\r\n
序列是相当独特的,我认为您应该能够以这种方式进行搜索?
更糟糕的是,Mac以前只用'\ r'代替换行符。我无法验证这一点,但我认为MacOSX世代不再这样做了。
较旧的Mac(CR)
\r
grep "\r\n" *
没有任何结果。既没有结果,egrep -e "\r\n" *
也没有结果grep -E "\r\n" *
\r
我的坏。完整的Windows换行符确实是\r\n
CRLF