./1/dos1.txt: ASCII text, with CRLF line terminators
./2/dos2.txt: ASCII text, with CRLF line terminators
./dos.txt: ASCII text, with CRLF line terminators
# list files containing dos line endings (CRLF)
cr="$(printf "\r")" # alternative to ctrl-V ctrl-M
grep -Ilsr "${cr}$" .
grep -Ilsr $'\r$' . # yet another & even shorter alternative
8 回答
使用Ctrl V,Ctrl M在grep字符串中输入文字回车符 . 所以:
将工作 - 如果
^M
有你按照我的建议输入的文字CR .如果您想要文件列表,还要添加
-l
选项 .Explanation
-I
忽略二进制文件-U
阻止grep去除CR字符 . 默认情况下,如果它确定它是文本文件,它会这样做 .-r
递归读取每个目录下的所有文件 .grep可能不是你想要的工具 . 它将为每个文件中的每个匹配行打印一行 . 除非你想在10行文件上运行待机10次,否则grep并不是最好的方法 . 使用find在树中的每个文件上运行文件,然后点击“CRLF”,将为每个具有dos样式行结尾的文件提供一行输出:
会得到像你这样的东西:
explainshell.com - grep -IUlr
如果你的grep版本支持 -P (--perl-regexp) 选项,那么
可用于 .
查询是搜索...我有一个类似的问题...有人提交了混合行结尾到版本控件,所以现在我们有一堆文件
0x0d
0x0d
0x0a
行结尾 . 注意找到所有的行,而
和
找不到任何行,所以当涉及到行结束模式时,grep内部可能会有“其他”的东西......不幸的是对我来说!
如果像我一样,你的极简主义unix不包含像 file 命令这样的细节,并且 grep 表达式中的反斜杠只是不合作,试试这个:
您可能要对上述内容进行的修改包括:
调整 find 命令以仅查找要扫描的文件
将 dump 命令更改为 od 或您拥有的任何文件转储实用程序
确认 cut 命令同时包含前导和尾随空格以及 dump 实用程序的十六进制字符输出
为了提高效率,
将 dump 输出限制为前1000个字符左右
例如,像这样的东西可能适合你使用 od 而不是 dump :
您可以在unix中使用file命令 . 它为您提供文件的字符编码以及行终止符 .