Answers:
$ file f1 f2 f3
f1: ASCII text, with CRLF, LF line terminators
f2: ASCII text, with CRLF line terminators
f3: ASCII text
如果您有必要检查文件中的每一行,则可以执行以下操作:
$ grep -c "^M" f1 f2
f1:0
f2:3
$ wc -l f1 f2
3 f1
3 f2
6 total
使用Ctrl + V Ctrl + M输入“ ^ M”,它是ASCII回车(CR)字符。
在这里,我们看到文件f1有三行,但没有CR,因此所有的行尾都必须是Unix风格的单独LF。
文件f2具有相等数量的行和CR,因此可以合理地猜测它使用了MSDOS和Windows使用的CR,LF行尾。
file -m magicfile f1 f2 f3
在Windows上,一种快速的判断方法是在记事本中打开文件。记事本仅在Windows样式终端(CR + LF)上显示换行符,而在Unix终端(LF)上不显示换行符。因此,您的Unix文本将如下所示:
Line1Line2Line3Line4
而Windows文本将如下所示:
line1
line2
line3
line4
我对unix / linux平台不太熟悉,但是我敢肯定您可以对类似gedit或emacs的程序使用类似的技巧。
c=($(perl -0777ne 'print $_ =~ tr/\n//; print " ";
print $_ =~ tr/\r//;'))
if ((!(c[0] + c[1]))) ;then echo no line endings
elif (( c[0] && !c[1] )) ;then echo LF
elif (( !c[0] && c[1] )) ;then echo CR
elif (( c[0] == c[1] )) ;then echo CRLF
else echo "anbigious LF ${c[0]} CR ${c[1]}"
fi
请注意,为了速度起见,仅对\rs和\ns进行计数,但这将是一个非常怪异的文件,两种类型的数量相同,但不是Windows CRLF文件...
另请注意,* nix工具file不会对文件进行完整扫描,而此perl脚本会这样做。您没有提到希望在哪个平台上运行;我已经使用bash脚本来测试perl的输出,但是可以将其更改为Window cmd脚本。
您可以将文件通过管道传输到该文件。
file如果找到比ASCII更接近的匹配,即不输出行结束状态setup.py: a python script text executable。似乎无法找到一个标志来改变这种行为。