Я знаю, что мы можем использовать dos2unix для конвертации между Windows и Unix строкой терминации. Мне интересно, есть ли какая-нибудь команда, которая может сказать мне, если файл имеет Windows или Unix конец строки?
8
$ 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 и является символом возврата каретки (CR) ASCII.
Здесь мы видим, что файл f1 имеет три строки, но не содержит CR, поэтому все окончания строк должны быть одиночными LF в стиле Unix.
Файл f2 имеет одинаковое количество строк и CR, поэтому разумно предположить, что он использует окончания строк CR, LF, используемые в MSDOS и Windows.
file
не выводит окончание строки состояния , если он может найти более точное соответствие , чем ASCII, то естьsetup.py: a python script text executable
. Кажется, я не могу найти флаг, чтобы изменить это поведение.file -m magicfile f1 f2 f3
В Windows быстрый способ определить это - открыть файл в блокноте. Блокнот будет показывать разрывы строк только на концах стиля Windows (CR + LF), а не на концах Unix (LF). Таким образом, ваш текст Unix будет выглядеть так:
тогда как текст Windows будет выглядеть так:
Я не очень знаком с платформой Unix / Linux, но я уверен, что вы можете использовать подобные хаки с такими программами, как gedit или emacs.
источник
Обратите внимание, что из соображений скорости подсчитываются только отдельные
\r
s и\n
s, но это был бы довольно дурацкий файл, который имел бы одинаковое количество обоих типов и все же не был файлом CRLF для Windows ...Также обратите внимание, что инструмент * nix
file
не выполняет полное сканирование файла, в то время как этотperl
скрипт делает. Вы не упомянули, на какой платформе вы хотите, чтобы она работала; Я использовалbash
скрипт для проверки вывода perl, но его можно изменить наcmd
скрипт Windows .Вы можете просто передать свой файл к нему.
источник