Чи є команда Bash для перетворення \ r \ n в \ n?


19

Чи є команда Bash для перетворення \ r \ n в \ n?

Коли я завантажую свої сценарії з Windows в Linux, мені потрібна така утиліта, щоб зробити роботу справною.


7
dos2unixзазвичай доступний, інакшеsed -e 's/\r$//'
falstro

1
Ні, для цього немає команди Bash, але dos2unixє програма Unix / Linux для того, щоб робити те, що ви хочете.
Призупинено до подальшого повідомлення.

1
Чому ви просто не використовуєте здоровий текстовий редактор, який дозволяє вибирати стиль нового рядка під час збереження файлів?
vtest

Відповіді:


28

Існує:

dos2unix

Це історично правильна відповідь, хоча dos2unix доступний не завжди.
Джаред

5

Переклад ( 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що може конвертувати закінчення рядків. Вона часто запускається з softlinks до u2dабо d2uабо unix2dosабо dos2unix.

Крім того, є утиліти, що називаються fromdosта todos.


2

Використання man 1 ed (який редагує файли на місці без попередньої резервної копії - на відміну від: sed .. -i ".bak" ...):

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

Я навіть не знав Ед, але це робить роботу (стара, але золота)
dwana

Ця команда працювала для мене, коли команд з інших відповідей не існувало на спільному хостингу, який я використовую. Дякую :)
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 ФАЙЛ

(Кожна також існує для систем, що не належать до Ubuntu, але ці посилання зручні.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.