Dos2unix не конвертирует ^ M

Я экспортировал результаты в текстовый файл из программы, запущенной в Windows 7, и скопировал файл на Xubuntu 14.04. В терминале я запустил dos2unix file.txt, который сообщает мне converting file out_mapqtl.txt to Unix format. Однако, когда я смотрю на файл с less, я все еще вижу конец Windows как ^ M, а wc -l возвращает мне "0".

Я попробовал несколько описанных здесь, но никто не работает. Затем я открыл файл в Vim и сделал :%s/\r/\r/g, как объяснил там, который работал нормально. Итак, любая идея, почему dos2unix не работает? Будет ли способ избежать открытия Vim каждый раз?

Ответ 1

\r обозначает возврат каретки, а на MAC он используется без \n для обозначения разрыва строки. Вы уверены, что файл находится в формате DOS (\r\n), а не MAC (\r)?

Если VIM действительно оказывается единственным, что восстановит ваши файлы, вы также можете вызвать его как:

vim somefile.txt +"%s/\r/\r/g" +wq

Это откроет файл, выполнит операцию, сохранит ее, а затем закроется.

Можете ли вы привести нам пример файла, чтобы мы могли продолжить исследование?

Ответ 2

Я знаю, что вы получили это решение, но я хотел добавить примечание для справки, основанное на некоторых тестах, которые я сделал.

Если меньше отображается ^ M, то, как и Sybren, я подозреваю, что это конец MAC-стиля (\ r), а не DOS (\ r\n). Вы можете легко определить, используя cat:

$cat -e имя_файла

  • Окончания Unix (\n) отображаются как $
  • Окончания MAC (\ r) отображаются как ^ M (меньше это показывает)
  • DOS\Windows endings (\ r\n) отображаются как ^ M $ (меньше не отображаются)

Используйте dos2unix, чтобы избавиться от окончаний DOS (^ M $)

Используйте mac2unix, чтобы избавиться от окончаний MAC (^ M) - dos2unix не избавится от них.

У меня был файл, где мне пришлось использовать dos2unix и mac2unix, чтобы избавиться от всех окончаний, отличных от Unix.

Ответ 3

Попробуйте следующее:

tr -d '\r' < file

Ответ 4

Попробуйте:

:%s/\r\(\n\)/\1/g

или

:%s/^M//g