回答:
$ 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
「^ M」はCtrl + V Ctrl + Mを使用して入力されたもので、ASCII復帰(CR)文字です。
ここでは、ファイルf1に3行ありますがCRがないため、すべての行末はUnixスタイルのソロLFでなければなりません。
ファイルf2の行数とCRの数は同じであるため、MSDOSとWindowsで使用されているCR、LFの行末を使用していると推測するのが妥当です。
file -m magicfile f1 f2 f3
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
速度を上げるために、個々\rのとのみ\nがカウントされることに注意してください。これは、両方のタイプの数が同じで、しかもWindows CRLFファイルではないかなり奇抜なファイルです...
また、* nixツールfileはファイルの完全なスキャンを実行しませんが、このperlスクリプトはファイルを実行します。実行したいプラットフォームについては言及していません。bashスクリプトを使用してperlの出力をテストしましたが、ウィンドウcmdスクリプトに変更できます。
パイプでファイルを渡すことができます。
fileASCIIより近い一致が見つかると、行末ステータスを出力しませんsetup.py: a python script text executable。Aはその動作を変更するフラグを見つけることができないようです。