CRLF'leri Linux'taki yayınlara yönlendirmek için dönüştürme


34

CRLF'leri Linux'taki dosyalardaki feed'leri satırlara dönüştürmenin en iyi yolu nedir ?

Sed komutları gördüm , ama daha basit bir şey var mı?


4
Dupe: superuser.com/questions/38744/… . Kabul edilen cevapta verilen link diğerleri arasında dos2unix, perl ve vi seçeneklerini kapsar.
nagul

2
Ancak bu durumun daha iyi cevapları var (eğer bunlardan biri kapatılacaksa, muhtemelen öyle olmalı)
Jonik

Yanıtlar:


40

Bu komutu kullanın:

fromdos yourtextfile

Diğer türlü:

todos yourtextfile

Bu komutlar, aynı addaki eski unix araçlarını taklit eden iki sargıya unix2dos ve dos2unix sağlayan tofrodos paketinde (en son dağıtımlarda) bulunur .


2
+1 Şu anda en çok oy alan "Dos2unix Kullan" yanıtından çok daha faydalı.
Jonik

1
Evet, ben bile bunu oyluyorum. Benimki daha çok bir öneriydi.
Ryan C. Thompson,

Özyinelemeli yapmayı söylersen, ekstra bonus veririm. Şu anda yalnızca joker karakterlerle çalışır.
sorin

2
@SorinSbarnea: gibi bir şeyfind . -name '*.txt' -print0 | xargs -null fromdos
bstpierre

@Jonik "Çok daha kullanışlı" kılan nedir? Ciddi soru
andrewtweber

24

Kullanın dos2unix.

dos2unix - DOS / MAC’tan UNIX’e metin dosyası

dos2unix  [options] [-c convmode] [-o file ...] [-n infile outfile ...]

Options:
          [-hkqV] [--help] [--keepdate] [--quiet] [--version]

2
ve diğer taraftan 'unix2dos'.
quack quixote

Quack, beni takip ediyor musun? Takdir etmiyorum, bütün artılarla.
Ryan C. Thompson,

1
dostum, ben şarlatanım. "değil" olarak "~" telaffuz edilir. :) ama hayır, seni takip etmiyor, ben sana sıkça rastlıyor gibiyim.
quack quixote

1
Linux sisteminiz için bu yardımcı programın nasıl kullanılacağına dikkat edin. Ubuntu üzerinde En azından varsayılan olarak yüklü değil (ama yükleyerek tofrodos çok benzer bir şey olsun paketlemek: packages.ubuntu.com/jaunty/tofrodos ).
Jonik

20

Perl'i tercih ederim :

perl -lne 's/\r//g; print' winfile.txt > unixfile.txt

Ama bu benim kullanımıma çok uygun ve hatırlamam için çok kolay. Tüm sistemler dos2unix komutuna sahip değildir, ancak üzerinde çalıştığım çoğu kişinin perl yorumlayıcısı var.

Başka bir kod, dos2unix ve iconv için güçlü bir yedek olan recode ; Debian depolarındaki "recode" paketinde mevcuttur:

recode ibmpc..lat1 winfile.txt   # dos2unix
recode lat1..ibmpc unixfile.txt  # unix2dos

İçin awk fanlar:

awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt

... ve sed :

sed 's/\r$//' winfile.txt > unixfile.txt

Ve şimdi, CR'leri bir hex editöründe elle silmek yerine sadece biraz daha az toplanmış, doğrudan tercüman.com arkadaşlarımızdan birinden , sığır tercümanıyla birlikte kullanabileceğiniz (dost mahalleniz Debian deposunda),

brainfuck içinde dos2unix !

,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++.

Bunu yazmak için hayatının bir saatini boşa harcadığı için jk'a teşekkürler!


1
(kedinin yararsız kullanımı ve) perl sed kadar karmaşıktır ... bu yüzden soruyu gerçekten cevaplamıyorsun, daha çok itibar topluyorsun :)
akira

2
"en iyi yol" özneldir. bu benim için en iyisidir (ton ile sed'den daha rahatım). Senin için en iyisini yapacağıma dair söz vermedim.
quack quixote

@ akira: bir sorunun birden fazla geçerli cevabı olabilir. Bu yöntemi de, bazen, çoğunlukla diğer değişikliklerle birlikte kullanıyorum, bu yüzden kesinlikle geçerli bir cevap; Ancak "dos2unix kullanın" çoğu durumda kesinlikle daha pratik bir cevaptır. Bu yüzden reytinglerin iyi olduğunu düşünüyorum.
reinierpost

@ akira: Daha basit bulursanız, lütfen cevap olarak gönderin ve geri kalanı aydınlatın.
quack quixote

@ ~ quack: Mesele şu: basit değil. perl cevabınız için aynı. u2d veya fromdos / todos doğru cevaplardır çünkü diğer programlama dillerinde ifade edilen her şeyden daha basittirler .
akira

9

Bunu Bash üzerinde yapıyorum :

cat cr_stuffed.file | tr -d \r > no_more_crs.file

Güzel. Bugün daha önce tr başka bir söz gördüm. çok sık bahseden bir program değil, değil mi?
quack quixote

7

Ben de kullanabileceğinizi düşünüyorum tr(denemek için hiçbir komik biçim dosyaları olsa da):

tr -d '\r' < file1 > file2


4

Çok kolay bir yol buldum… Dosyayı nano ile aç: ## nano file.txt

kaydetmek için Ctrl + O tuşlarına basın, ancak Enter tuşuna basmadan önce: DOS ve Unix / Linux satır sonları arasında geçiş yapmak için Alt + D tuşlarına basın veya: Mac ve Unix / Linux satır sonları arasında geçiş yapmak için Alt + D tuşlarına basın, ardından kaydetmek için Enter tuşuna basın. Çıkmak için Ctrl + X


1
Hangi geçiş ayarlarının OP tarafından istenen davranışı kopyalayacağını netleştirmek için cevabınızı düzenleyebilir misiniz ?
Burgi

OP değişiklik yapmak istiyorsa kapalı böylece, DOS satır sonları Alt+d. Bazen alt, terminal programı tarafından yakalanır, böylece esc+donun yerine kullanabilirsiniz .
toplanma

1
Birçok nano kısayol da Shift tuşuna basıldığında çalışır, bu da terminal kesişimini önler, bu nedenle 'Alt-Shift-D' de çalışır.
mwfearnley

3

Ben tercih Vim ve :set fileformat=unix. En hızlı olmasa da, bana bir önizleme veriyor. Özellikle karışık sonlu bir dosya durumunda kullanışlıdır.


1

Bir GUI yöntemi istiyorsanız, Kate metin düzenleyicisini deneyin (diğer gelişmiş metin düzenleyicileri de bunun üstesinden gelebilir). Bul / Değiştir'i açın (iletişim Ctrl+ R) ve yerini \r\nile \n. (Not: açılır menüden "Normal ifade" yi seçmeniz ve seçeneklerden "Yalnızca seçim" in seçimini kaldırmanız gerekir.)

DÜZENLEME: Veya sadece Unix biçimine dönüştürmek istiyorsanız, o zaman menü seçeneğini kullanın Tools> End of Line>Unix .


Bu dönüşümleri otomatik olarak yapabilen jEdit gibi metin editörleri var - sadece Unix, Windows veya Mac satır ayırıcıları istiyorsanız bunu söyleyin.
Jonik

Aslında, KATE bunu Araçlar> Satır Sonu menüsünden de yapabilir. Belki ben ifadeli edildi aynen soruya cevap daha yanal düşünmeliydi - ama özel olarak dönüştürmek istediğini biliyorum eğer \r\niçin \ndaha sonra arama özelliğini kullanarak / OS kullandığı hat biten hatırlamak daha kolaydır değiştirin. ;)
DisgruntledGoat

1

Bunu dos2unix.py Python betiğine yapıştırın .

#!/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 yüklü olan herhangi bir platformda çalışması gerekir. Kamu malı.


1

CR LFiçin LFkullanan awk :

awk -v RS='\r?\n' 1
command | awk -v RS='\r?\n' 1
awk -v RS='\r?\n' 1 filename

Kullanım örneği:

echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' 1 | hexdump -C

Açıklama:

-v RS='\r?\n'setleri değişken SC ( giriş r üzerindeki Record s eparator) için \r?\n, yani, giriş hattı ile hat LF (ayrılmış okunur \n(olabilir) ?) (CR tarafından öncesinde \r).

1awk komut dosyası çalıştırır. Bir komut dosyası oluşur condition { action }. Bu durumda, 1doğru olarak değerlendiren durumdur. Eylem atlanır, bu nedenle varsayılan eylem yürütülür; bu , geçerli satırı yazdırmak anlamına gelir (bu, aynı zamanda {print $0}veya basit olarak da yazılabilir {print}).


LFiçin CR LF: Bu değişken ayarlayabilirsiniz ORS( O ıkış r üzerindeki Record s çıkış hattı uçlarını değiştirmek için eparator). Örnek:

echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' -v ORS='\r\n' 1 | hexdump -C

0

Bu komut dosyasını, bir windows sisteminden bir unix sistemine acil durum aktarımı için gereken dosyalar için kullandım.

 find . -type f | xargs file | grep CRLF | cut -d: -f1 | xargs dos2unix

find . -type f

Komutu çalıştırdığınız dizinde yinelemeli olarak tüm dosyaları bulur.

xargs file

Dosya analizini almak için dosya programına iletin.

grep CRLF

Yalnızca CRLF'yi gösteren dosyanın çıktısını istiyoruz .

cut -d: -f1

Çıktıyı renge kadar alın. gerisini atın. Şimdi sadece bir dosya adına sahip olmalıyız.

xargs dos2unix

Program için dosya adını iletin dos2unix kullanarak xargs .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.