Какой лучший способ конвертировать CRLF в перевод строки в файлах в Linux?
Я видел команды sed , но есть ли что-нибудь попроще?
Какой лучший способ конвертировать CRLF в перевод строки в файлах в Linux?
Я видел команды sed , но есть ли что-нибудь попроще?
Используйте эту команду:
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
. Хотя и не самый быстрый, он дает мне предварительный просмотр. Это особенно полезно в случае файла со смешанными окончаниями.
Вставьте это в скрипт Python dos2unix.py .
#!/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. Всеобщее достояние.
CR LF
в LF
с использованием awk:
awk -v RS='\r?\n' 1
command | awk -v RS='\r?\n' 1
awk -v RS='\r?\n' 1 filename
Пример использования:
echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' 1 | hexdump -C
Объяснение:
-v RS='\r?\n'
переменную RS (Вход R ecord сек eparator) к \r?\n
, что означает, что ввод читается построчно через LF (\n
), который может (?
) предшествовать CR (\r
).
1
- это скрипт, выполняемый awk. Скрипт состоит из condition { action }
. В этом случае 1
- это условие, которое оценивается как истинное. Действие опущено, поэтому выполняется действие по умолчанию, что означает печать текущей строки (которая также может быть записана как {print $0}
или просто {print}
).
LF
в CR LF
Вы можете установить переменный ORS
(о utput ¨R ecord сек eparator) , чтобы изменить линию заканчивается на выходе. Пример:
echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' -v ORS='\r\n' 1 | hexdump -C
Если вам нужен метод с графическим интерфейсом, попробуйте текстовый редактор Kate (другие продвинутые текстовые редакторы тоже могут с этим справиться). Откройте диалоговое окно поиска / замены (Ctrl+R) и замените \r\n
на \n
. (Примечание: вам нужно выбрать "Регулярное выражение" из выпадающего списка и отменить выбор "Только выбор" из опций.)
РЕДАКТИРОВАТЬ: Или, если вы просто хотите конвертировать в формат Unix, затем используйте пункт меню Tools
> End of Line
> Unix
.