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

19

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

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

user25321
источник
7
dos2unixобычно доступен, иначеsed -e 's/\r$//'
фальстро
1
Нет, для этого нет команды Bash, но есть программа dos2unixдля Unix / Linux, которая делает то, что вы хотите.
Приостановлено до дальнейшего уведомления.
1
Почему бы вам просто не использовать здравый текстовый редактор, который позволяет выбирать стиль новой строки при сохранении файлов?
Вторник

Ответы:

28

Есть:

dos2unix
RaYell
источник
Это исторически правильный ответ, хотя dos2unix не всегда доступен в наши дни.
Джаред
5

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

tr -d '\r'  # From \r\n line end (DOS/Windows), the \r will be removed so \n line end (Unix) remains.
Питер Мортенсен
источник
1
Имеет побочный эффект от удаления любых других \r. Они очень необычные, хотя.
ivan_pozdeev
5

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

 sed -rie 's/\r\n/\n/' \
 $(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")
fitorec
источник
5

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

Дополнительно есть утилиты под названием fromdosи todos.

Стивен Пенни
источник
2

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

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

источник
Я даже не знаю, Эд, но он делает работу (старая, но золотая)
Двана
Эта команда работала для меня, когда команды из других ответов не существовали на общем хостинге, который я использую. Спасибо :)
FKasa
2

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

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

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

  • d2u и dos2unix не POSIX утилит , но бывший есть

  • POSIX бывший не поддерживает \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
Стивен Пенни
источник
0

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

[justin@mybox ~]$ dos2unix myfile
Джастин этир
источник
0

$ recode dos .. FILE
$ flip -u FILE

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


источник