Jeśli plik ma zakończenia linii CR-LF w stylu DOS / Windows, to jeśli spojrzysz na nie za pomocą narzędzia uniksowego, zobaczysz znaki CR („\ r”) na końcu każdej linii.
To polecenie:
grep -l '^M$' filename
wydrukuje, filename
jeśli plik zawiera jedną lub więcej linii z zakończeniami w stylu Windows, i nie wydrukuje nic, jeśli nie będzie. Tyle, że ^M
musi to być dosłowny znak powrotu karetki, zwykle wprowadzany w terminalu, wpisując Ctrl+, Va następnie Enter
(lub Ctrl+, Va następnie Ctrl+ M). Powłoka bash pozwala napisać dosłowny znak powrotu karetki jako $'\r'
( udokumentowany tutaj ), dzięki czemu możesz napisać:
grep -l $'\r$' filename
Inne powłoki mogą zapewniać podobną funkcję.
Zamiast tego możesz użyć innego narzędzia:
awk '/\r$/ { exit(1) }' filename
Spowoduje to wyjście ze statusem 1
(ustawienie $?
na 1
), jeśli plik zawiera jakieś zakończenia linii w stylu Windows, oraz ze statusem 0
jeśli nie, co czyni go przydatnym w if
instrukcji powłoki (zauważ brak [
nawiasów ]
):
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
Plik może zawierać mieszaninę zakończeń linii w stylu Unix i Windows. Zakładam, że chcesz wykryć pliki, które mają dowolne zakończenia linii w stylu Windows.