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


19

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

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


7
dos2unixобычно доступен, иначеsed -e 's/\r$//'
фальстро

1
Нет, для этого нет команды Bash, но есть программа dos2unixдля Unix / Linux, которая делает то, что вы хотите.
Приостановлено до дальнейшего уведомления.

1
Почему бы вам просто не использовать здравый текстовый редактор, который позволяет выбирать стиль новой строки при сохранении файлов?
Вторник

Ответы:


28

Есть:

dos2unix

Это исторически правильный ответ, хотя 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\)")

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

$ recode dos .. FILE
$ flip -u FILE

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.