Her yeni satırdan önce satır başı nasıl eklenir?


28

Yalnızca \nyeni satırlar için kullanan bir dosyam var, ancak \r\nher yeni satır için olması gerekiyor . Bunu nasıl yapabilirim?

Örneğin, Vim'de kullanarak çözdüm :%s/\n/\r\n/g, ancak bir komut dosyası veya komut satırı uygulaması kullanmak istiyorum. Baska öneri?

Bunu aramaya çalıştım sed veyagrep , ancak kaçış dizisi geçici çözümleriyle hemen kafam karıştı (bu komutlarla biraz yeşilim).

Eğer ilgileniyorsanız, başvuru burada soru / cevap ile ilgilidir.

Yanıtlar:


36

(Debian'da bulunan) unix2dos'u kullanabilirsiniz :

unix2dos file

Bu uygulama bir insert etmeyeceğini Not CRher önce LFyalnızca önce, LFzaten biri (ve yalnızca birinde) öncesinde olmayan s CRve ikili dosyaları atlar (0x0 içinde bayt değerleri içeren olanlar -> 0x1F dışındaki aralığı LF, FF, TABveya CR).

veya kullan sed:

CR=$(printf '\r')
sed "s/\$/$CR/" file

veya kullan awk:

awk '{printf "%s\r\n", $0}' file

veya kullan perl:

perl -pe 's|\n|\r\n|' file

O Not unix2dox bir insert olmaz CRönce her sadece zaten biri (ve yalnızca birinde) CR öncesinde almayan LFS önce, LF.
Stéphane Chazelas

@ StéphaneChazelas: Konu için teşekkürler, cevabımı ekledi.
cuonglm

1
Burada kullanıyordum benim için en önemli bilgi parçası '\r'ile sedhile yok.
rkersh

8

Bu tam olarak ne unix2dosyapar:

$ unix2dos file.txt

Bu yerini alacak file.txt yerinde CRLF satır sonları olan bir sürümle .

Bunu yapmak istiyorsanız sed, her satırın sonuna bir satır başı ekleyebilirsiniz:

sed -e 's/$/\r/' file.txt

Bu, ( s) satırının sonundan hemen önce sıfır boyut alanını ( $) ile değiştirir \r. Yerinde değiştirme işlemini yapmak için (olduğu gibi unix2dos) kullanın sed -i.bak, ancak standart dışı bir uzantı olsa da kullanın - yoksa, geçici bir dosya kullanın.


3
Değişiminde kullanım \rtaşınabilir değildir. En azından Mac OSX'te çalışmaz.
cuonglm

Unix2dos'un birkaç uygulaması olduğunu unutmayın. Belirli bir uygulamanın ( Debian'da olduğu gibi waterlan.home.xs4all.nl/dos2unix.html gibi), linux.die.net/man yerine hangi sayfanın açık olduğunu belirtmek istemezsiniz. uygulama (veya sürüm) belgelenmiştir. Not bazı olduğumuzu u2d, ux2dos, todosyanı etrafında emreder.
Stéphane Chazelas

2

Dönüştürmeyi bir Unix makinesinde (OS X, Linux) yapıyorsanız, dosyayı viveya ile açın vim:

$ vim my-file

ekleme modunda olmadığından emin olmak için ESC tuşuna basın, ardından

:set ff=dos

veya

:set fileformat=dos

Bu dosya formatını ayarlayarak yerinde dönüşüm yapar.

Dosyayı yazmak ve editörden çıkmak için

:wq

Komut satırında yapabilirsiniz

$ vi +':w ++ff=dos' +':q' my-file

Tüm adımları açıkladığınız için teşekkürler - Yeni başlayanlar için neler olup bittiğini anlamak çok daha kolay.
user3616725

2

POSIX ile bunu yapmak çok zordur:

Taşıma iadelerini kaldırmak için:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

Satır başı eklemek için:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file

1

Bunu yapacak taşınabilir bir kabuk işlevi:

u2dos() (set -f; IFS='
'; printf '%s\r\n' $(cat "$1"))

Bununla yapabilecekleriniz:

u2dos file >dosfile

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.