1

Если я сделаю это для файла Mac, я получу правильное количество строк, но получу двойные строки в файлах Unix:

cat /path/to/file.txt | tr '\r' '\n' | wc -l

Если я сделаю это для файла Unix, я получу правильное количество строк, но ноль строк в файле Mac:

cat /path/to/file.txt | wc -l

Как получить правильное количество строк в одной команде независимо от происхождения файловой системы (Linux, Mac, Windows)?

1 ответ1

0

Я бы посоветовал проверять файлы, с которыми вы работаете, на предмет того, какой стиль перевода строки в них используется.

$ od -t x1z

напечатает содержимое файла в шестнадцатеричных байтах и "ASCII", ищет байты 0A и 0D.

У меня есть функция bash, которая определена в ~/ .profile/ или ~/ .bashrc, чтобы помочь с такими проблемами:

function od-crlf {
#DOC echo "od-crlf FILE - displays file contents in HEX w CR+LF chars emphasized"

  od -Ax -t x1z -w32 $@ \
  | sed -re 's/(0a)/\x1b[44m\1\x1b[m/g;s/(0d)/\x1b[45m\1\x1b[m/g'
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .