Преобразование CRLF в линейные каналы в Linux
Каков наилучший способ конвертировать CRLF в линейные каналы в файлах в Linux?
Я видел команды sed , но есть ли что-нибудь более простое?
- Тройная загрузка (OS X / Win / Linux) через rEFIt не работает - Linux не отображается в rEFIt
- Как ограничить скорость канала под linux?
- Есть ли способ ограничить доступ на чтение к страницам в MediaWiki?
- Почему может -exec повлиять на вывод find в Linux?
- OOM-убийца, несмотря на множество свободной памяти на ядре PAE
- SSH-туннелирование для обхода брандмауэра (http и socks)
- В чем опасность вставки и просмотра ненадежного USB-накопителя?
- Изменить текстовый редактор по умолчанию на Sublime Text в Linux Mint
- Differnce между blockize и bytesize в файловых системах linux / unix
- Как сказать Linux явно заменить основную память приостановленного процесса?
- Возможно ли запустить двоичный файл x86 на процессоре ARM?
- Есть ли способ показать уведомление из сценария bash в Ubuntu?
- Где Linux размещает сообщения о загрузке?
Используйте эту команду:
fromdos yourtextfile
Другой способ:
todos yourtextfile
Эти команды находятся в пакете tofrodos (в самых последних дистрибутивах), который также предоставляет две оболочки unix2dos и dos2unix, которые имитируют старые инструменты Unix с тем же именем.
Используйте dos2unix
.
Dos2unix – DOS / MAC для конвертера формата текстового файла UNIX
dos2unix [options] [-c convmode] [-o file ...] [-n infile outfile ...] Options: [-hkqV] [--help] [--keepdate] [--quiet] [--version]
Я предпочитаю perl :
perl -lne 's/\r//g; print' winfile.txt > unixfile.txt
Но это хорошо подходит для моих целей, и мне очень легко запомнить. Не все системы имеют команду dos2unix, но большинство из которых я работаю, имеют интерпретатор perl.
Другой – перекод , мощная замена dos2unix и iconv; Он доступен в пакете «recode» в репозиториях Debian:
recode ibmpc..lat1 winfile.txt # dos2unix recode lat1..ibmpc unixfile.txt # unix2dos
Для поклонников awk :
awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt
… и sed :
sed 's/\r$//' winfile.txt > unixfile.txt
И теперь, только немного менее запутанный, чем удаление CR вручную в шестнадцатеричном редакторе, прямо из одного из наших друзей stackoverflow.com , можно использовать с интерпретатором beef (расположенным в вашем дружественном хранилище Debian)
Dos2unix в brainfuck !
,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++.
Большое спасибо jk за то, что он потратил час своей жизни, чтобы написать это!
Я делаю это на Bash :
cat cr_stuffed.file | tr -d \r > no_more_crs.file
Я думаю, вы также можете использовать tr
(хотя у меня нет смешных файлов формата, на которых можно попробовать):
tr -d '\r' < file1 > file2
Я нашел очень простой способ … Открыть файл с nano: ## nano file.txt
Нажмите Ctrl + O, чтобы сохранить, но перед нажатием Enter нажмите: Alt + D для переключения между линиями DOS и Unix / Linux или: Alt + M для переключения между линиями Mac и Unix / Linux, затем нажмите Enter для сохранения и Ctrl + X, чтобы выйти.
В vi или Vim :
:%s/^V^M//g
Я предпочитаю Vim и :set fileformat=unix
. Хотя это и не самый быстрый, это дает мне предварительный просмотр. Это особенно полезно в случае файла со смешанными окончаниями.
Если вы хотите использовать GUI-метод, попробуйте текстовый редактор Kate (другие редакторы текста могут также справиться с этим). Откройте диалоговое окно find / Replace ( Ctrl + R ) и замените \r\n
на \n
. (NB: вам нужно выбрать «Регулярное выражение» из раскрывающегося списка и отменить выбор «Только выбор» из параметров.)
EDIT: Или, если вы просто хотите конвертировать в формат Unix, используйте пункт меню « Tools
> « End of Line
> « Unix
.
Вставьте это в dos2unix.py скрипт Python.
#!/usr/bin/env python """\ convert dos linefeeds (crlf) to unix (lf) usage: dos2unix.py <input> <output> """ import sys if len(sys.argv[1:]) != 2: sys.exit(__doc__) content = '' outsize = 0 with open(sys.argv[1], 'rb') as infile: content = infile.read() with open(sys.argv[2], 'wb') as output: for line in content.splitlines(): outsize += len(line) + 1 output.write(line + '\n') print("Done. Saved %s bytes." % (len(content)-outsize))
Должен работать на любой платформе с установленным Python. Всеобщее достояние.