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ı?
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ı?
Yanıtlar:
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 .
find . -name '*.txt' -print0 | xargs -null fromdos
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]
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!
Bunu Bash üzerinde yapıyorum :
cat cr_stuffed.file | tr -d \r > no_more_crs.file
Ben de kullanabileceğinizi düşünüyorum tr
(denemek için hiçbir komik biçim dosyaları olsa da):
tr -d '\r' < file1 > file2
Ç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
Alt+d
. Bazen alt, terminal programı tarafından yakalanır, böylece esc+d
onun yerine kullanabilirsiniz .
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\n
ile \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
.
\r\n
için \n
daha sonra arama özelliğini kullanarak / OS kullandığı hat biten hatırlamak daha kolaydır değiştirin. ;)
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ı.
CR LF
için LF
kullanan 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
).
1
awk komut dosyası çalıştırır. Bir komut dosyası oluşur condition { action }
. Bu durumda, 1
doğ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}
).
LF
iç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
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