Как преобразовать новую строку DOS / Windows (CRLF) в новую строку Unix (LF) в сценарии Bash? - PullRequest
298 голосов
/ 10 апреля 2010

Как я могу программно (то есть, не используя vi) преобразовать переводы DOS / Windows в Unix?

Команды dos2unix и unix2dos недоступны в некоторых системах. Как я могу эмулировать их с помощью команд, таких как sed / awk / tr?

Ответы [ 23 ]

0 голосов
/ 10 сентября 2013

я пробовал sed 's / ^ M $ //' file.txt в OSX и некоторых других методах (http://www.thingy -ma-jig.co.uk / blog / 25-11-2010 / fixing-dos-line-endings или http://hintsforums.macworld.com/archive/index.php/t-125.html). Нет сработало, файл остался без изменений (кстати, Ctrl-v Enter был необходим для воспроизведения ^ M). В конце концов я использовал TextWrangler. Это не строго командная строка, но она работает и не жалуется.

0 голосов
/ 13 октября 2017

Существует множество ответов на awk / sed / etc, так что в качестве дополнения (так как это один из лучших результатов поиска по данной проблеме):

Возможно, у вас нет dos2unix , но у вас есть iconv ?

iconv -f UTF-16LE -t UTF-8 [filename.txt]
-f from format type
-t to format type

Или все файлы в каталоге:

find . -name "*.sql" -exec iconv -f UTF-16LE -t UTF-8 {} -o ./{} \;

Эта команда запускает одну и ту же команду для всех файлов .sql в текущей папке. -o - это выходной каталог, поэтому вы можете заменить его текущими файлами или, в целях безопасности / резервного копирования, вывести в отдельный каталог.

0 голосов
/ 24 января 2017

В качестве расширения решения Джонатана Леффлера для Unix to DOS, для безопасного преобразования в DOS, когда вы не уверены в конце строки файла:

sed '/^M$/! s/$/^M/'

Это проверяет, что строка еще не заканчиваетсяCRLF перед преобразованием в CRLF.

...