Якщо файл має закінчення рядка 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.