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 каждый раз?

4 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Попробуй это:

tr -d '\r' < file

Пытаться:

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

или же

:%s/^M//g

Я использовал функцию Notepad++: Edit>EOL Conversions>Unix(LF).

Теперь экспортируйте этот файл на машину Unix с помощью pscp.exe.

Сообщите мне, сработало ли это для вас.

Другие вопросы по тегам