17

Есть ли команда Bash для преобразования \r \n в \n?

Когда я загружаю свои скрипты из Windows в Linux, мне нужна такая утилита, чтобы все заработало.

8 ответов8

24

Есть:

dos2unix
5

Существует утилита Unix под названием conv которая может преобразовывать окончания строк. Он часто вызывается с softlinks к u2d или d2u или unix2dos или dos2unix

Кроме того, есть утилиты, которые называются fromdos и todos .

5

С помощью sed и найдите этот конец с помощью .txt, .php, .js, .css:

 sed -rie 's/\r\n/\n/' \
 $(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")
4

Translate (tr) доступен во всех Unixes:

tr -d '\r'  # From \r\n line end (DOS/Windows), the \r will be removed so \n line end (Unix) remains.
2

Делать это с POSIX сложно:

  • POSIX Sed не поддерживает \r или \15 . Даже если это так, опция -i на месте не POSIX

  • POSIX Awk поддерживает \r и \15 , однако опция -i inplace не POSIX

  • d2u и dos2unix не POSIX утилит , но ех

  • POSIX ex не поддерживает \r , \15 , \n или \12

Чтобы удалить возврат каретки:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

Чтобы добавить возврат каретки:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
1

Использование man 1 ed (который редактирует файлы на месте без какой-либо предыдущей резервной копии - в отличие от: sed .. -i ".bak" ...):

ed -s file <<< $'H\ng/\r*$/s///\nwq'
0

Да, используйте dos2unix . Например:

[justin@mybox ~]$ dos2unix myfile
0

$ recode dos .. ФАЙЛ
$ flip -u ФАЙЛ

(Каждый также существует для не-Ubuntu систем, но эти ссылки удобны.)

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