Який найкращий спосіб перетворити CRLF в рядкові канали у файли на Linux?
Я бачив команди sed , але чи є щось простіше?
Який найкращий спосіб перетворити CRLF в рядкові канали у файли на Linux?
Я бачив команди sed , але чи є щось простіше?
Відповіді:
Використовуйте цю команду:
fromdos yourtextfile
Навпаки:
todos yourtextfile
Ці команди знаходяться в tofrodos пакеті (на більшості сучасних дистрибутивів), який також надає два пакувальники Unix2Dos і dos2unix , які імітують старі інструменти UNIX одного і того ж імені.
find . -name '*.txt' -print0 | xargs -null fromdos
Використовуйте dos2unix
.
dos2unix - перетворювач формату текстових файлів UNOS / 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.
Інший - recode , потужна заміна dos2unix та iconv; він доступний у пакеті «перекодувати» у сховищах 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 , використовуваного з інтерпретатором яловичини (розташованим у вашому дружньому сховищі Debian сховища),
dos2unix in brainfuck !
,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++.
велике спасибі jk, що витратили годину свого життя, щоб написати це!
Я роблю це на Bash :
cat cr_stuffed.file | tr -d \r > no_more_crs.file
Я знайшов дуже простий спосіб… Відкрити файл з nano: ## nano file.txt
натисніть Ctrl + O, щоб зберегти, але перед натисканням клавіші Enter натисніть: Alt + D, щоб переключити між кінцями рядків DOS та Unix / Linux, або: Alt + M, щоб переключити міжрядкові закінчення Mac та Unix / Linux, а потім натисніть Enter, щоб зберегти та Ctrl + X, щоб вийти.
Alt+d
. Іноді програма alt перехоплюється термінальною програмою, тому ви можете використовувати її esc+d
замість.
Якщо вам потрібен метод GUI, спробуйте редактор тексту Kate (інші вдосконалені текстові редактори можуть також впоратися з цим). Відкрийте діалогове вікно пошуку / заміни ( Ctrl+ R) та замініть \r\n
на \n
. (Примітка: вам потрібно буде вибрати "Регулярний вираз" зі спадного меню та зніміть з опцій "Тільки для вибору".)
EDIT: Чи, якщо ви просто хочете конвертувати в формат Unix, то використовуйте опцію меню Tools
> End of Line
> Unix
.
\r\n
до \n
цього, то за допомогою пошуку / заміни простіше, ніж запам’ятовувати, яка ОС використовує, який рядок закінчується. ;)
Вставте це в скрипт 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. Публічний домен.
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 s eparator) на \r?\n
, тобто вхід читається рядок за рядком, розділеним LF ( \n
), якому може ( ?
) передувати CR ( \r
).
1
це сценарій, який виконує awk. Сценарій складається з condition { action }
. У цьому випадку 1
це умова, яка оцінюється як істинна. Дія опущена, тому виконується дія за замовчуванням, що означає надрукувати поточний рядок (який також можна записати як {print $0}
або просто {print}
).
LF
до CR LF
: Ви можете встановити змінну ORS
( o utput r ecord s eparator) для зміни кінців рядка виводу. Приклад:
echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' -v ORS='\r\n' 1 | hexdump -C
Я використовував цей скрипт для файлів, які мені потрібні для екстреної передачі файлів із системи Windows у систему Unix.
find . -type f | xargs file | grep CRLF | cut -d: -f1 | xargs dos2unix
find . -type f
Знаходить усі файли рекурсивно в каталозі, з якого виконується команда
xargs file
Передайте його до файлової програми, щоб отримати аналіз файлу.
grep CRLF
Ми хочемо лише вивести файл, який показує CRLF.
cut -d: -f1
Отримайте вихід до кольору. відкиньте решту. У нас має бути лише ім’я файлу зараз
xargs dos2unix