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

24247
user25321

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

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

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

9 ответов на вопрос

24
RaYell

Есть:

dos2unix 
Это исторически правильный ответ, хотя dos2unix не всегда доступен в наши дни. Jared 9 лет назад 0
5
Steven Penny

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

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

5
fitorec

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

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

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

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

Doing this with POSIX is tricky:

  • POSIX Sed does not support \r or \15. Even if it did, the in place option -i is not POSIX

  • POSIX Awk does support \r and \15, however the -i inplace option is not POSIX

  • d2u and dos2unix are not POSIX utilities, but ex is

  • POSIX ex does not support \r, \15, \n or \12

To remove carriage returns:

awk 'BEGIN' file 

To add carriage returns:

awk 'BEGIN' file 
1

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

ed -s file <<< $'H\ng/\r*$/s///\nwq' 
Я даже не знаю, Эд, но он делает работу (старый, но золотой) dwana 8 лет назад 0
0
Justin Ethier

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

[justin@mybox ~]$ dos2unix myfile 
0

$ recode dos .. FILE
$ flip -u FILE

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

-1
Aaron Harun

Вы можете использовать это для массовой замены всех строк в нескольких файлах, которые заканчиваются .html. Вы можете изменить это, чтобы соответствовать новому имени.

find -iname "*.html" -exec sh -cC ' sed 's/\r\n/\n/' "$1" > "$1" ' {} {} \; 
Это не безопасно! Во-первых, перенаправление вывода обычно обнуляет файлы, прежде чем `sed` сможет прочитать их содержимое (если оно есть в вашем` sed`, используйте `-i` вместо перенаправления оболочки для решения этой проблемы). Во-вторых, эта команда `sed` удалит последний символ каждой строки, независимо от того, является ли она \ r, запустите ее в файле не в формате DOS и удалит часть содержимого файлов. Gordon Davisson 13 лет назад 9

Похожие вопросы