Если файл имеет окончания строки CR-LF в стиле DOS / Windows, то если вы посмотрите на него с помощью инструмента на основе Unix, вы увидите символы CR ('\ r') в конце каждой строки.
Эта команда:
grep -l '^M$' filename
будет печатать, filename
если файл содержит одну или несколько строк с окончаниями строк в стиле Windows, и ничего не печатать, если это не так. За исключением того, что это ^M
должен быть буквальный символ возврата каретки, обычно вводимый в терминале, набирая Ctrl+ с Vпоследующим Enter
(или Ctrl+ Vи затем Ctrl+ M). Оболочка bash позволяет вам записать буквальный возврат каретки как $'\r'
( документировано здесь ), так что вы можете написать:
grep -l $'\r$' filename
Другие оболочки могут предоставлять аналогичную функцию.
Вместо этого вы можете использовать другой инструмент:
awk '/\r$/ { exit(1) }' filename
Это завершится со статусом 1
(установка $?
на 1
), если файл содержит какие-либо окончания строк в стиле Windows, и со статусом, 0
если это не так, что делает его полезным в операторе оболочки if
(обратите внимание на отсутствие [
скобок ]
):
if awk '/\r$/ { exit(1) }' filename ; then
echo filename has Unix-style line endings
else
echo filename has at least one Windows-style line ending
fi
Файл может содержать сочетание концов строк в стиле Unix и Windows. Я предполагаю , что здесь , что вы хотите , чтобы обнаружить файлы , которые имеют какие - либо окончания строк для Windows стиля.