DOS satır sonlarını vim'de Linux satır sonlarına dönüştürme


717

Windows'da oluşturduğum dosyaları açarsam, satırların tümü ile biter ^M.
Bu karakterleri bir kerede nasıl silebilirim?


Eğer yaparsanız hexdump -C badfileve 0x0d 0x0a "\r\n"bunun sizin probleminiz olduğunu görürseniz .
Yzmir Ramirez

Yanıtlar:


1075

dos2unix bunu yapacak bir komut satırı yardımcı programıdır veya ^ M'yi girmek :%s/^M//giçin Ctrl- v Ctrl- mkullanırsanız veya :set ff=unixvim bunu sizin için yapar.

'Dosya biçimi' ayarındaki dokümanlar burada ve vim wiki'nin satır sonu dönüşümleriyle ilgili kapsamlı bir sayfası var .

Alternatif olarak, dosyaları çok fazla ileri geri taşırsanız, onları dönüştürmek istemeyebilirsiniz, daha ziyade yapmak istersiniz :set ff=dos, bu yüzden vim bunun bir DOS dosyası olduğunu ve satır sonları için DOS kurallarını kullanacağını bilecektir.


56
:%s/^M//golmalıdır :%s/\r//g, çünkü ^M"satır başındaki" M "eşleme sermayesi" anlamına gelir.
Bunyk

78
Cevabın söylediği gibi yaparsanız ve '^ M girmek için ctrl-v ctrl-m kullanın'.
pjz

2
crtl-v iyi değil, pencerelerde pano içeriğini komut satırına yapıştırır. Çözüm :%s/\r//gbenim için çalıştı, şerefe @Bunyk
roblogic

3
@ropata Windows'ta istediğiniz şey ctrl-q .
Ruffin

2
Bir şey eksik olmalı, çünkü set ff=unixhiçbir şey yapmaz. Belki dosyayı dönüştürür, ancak tüm ^Mkarakterler hala oradadır.
Ocak 17'de felwithe

276

Görünümdeki satır sonlarını değiştirin:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

Bu, kaydetme işlemi olarak da kullanılabilir (: w, yalnızca ekranda gördüğünüz satır sonlarını kullanarak kaydetmez):

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

Ve komut satırından kullanabilirsiniz:

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done

4
Çok teşekkür ederim. Benim gibi tembel biri için vi + ': wq ++ ff = unix' <filepath> 'i denedim.
a_secenthusiast

2
Bu en çok onaylanan cevap olmalı. :w +ff=unixburada yazılı diğer şeylerin çoğundan çok daha güzel ve bash betiği güzel bir bonus.
mkasberg

:eKomutlar yüklemek Vim benim Windows üzerinde hiçbir şey görünmüyor. Benim görüşüm hala ^Mkodları gösteriyor .
Grant Birchmeier

160

Tipik olarak kullanıyorum

:%s/\r/\r/g

Bu biraz garip görünüyor, ancak vim'in hat yemleriyle eşleşmesi nedeniyle çalışıyor. Ayrıca hatırlamayı daha kolay buluyorum :)


9
Bu, platformlar arasında tutarlı bir şekilde çalışır. Burada en iyi cevap.
thebigjc

4
Daha önce hiç sorun yaşamadım :set ff=unix, ancak bugün açtığım dosya özellikle garip olmalı. Vim zaten olduğunu fileformat=unixama bütün satır sonlarının olduğunu söyledi ^M. Bu çözüm benim için çalıştı.
Chris B

15
Bu çözüm benim için istenmeyen ekstra satırlar ekleyerek dosyadaki satır sayısını iki katına çıkarıyor. :%s/\r//gonun yerine benim için çalışıyor.
Victor Zamanian

3
Victor, dosyalarınızın büyük olasılıkla \ r \ n sonu var. \ r yeni satır olarak okunmaz ancak \ n okunur. İçinde çalıştığım dosyalarda ve yeni satır karakteri eklemeniz gerekiyor.
Joeyjoejoejr

2
@ VictorZamanian's :%s/\r//g, özellikle DOS ve UNIX tarzı yeni satırların heterojen bir karışımını içeren karışık mod dosyaları için tek genel amaçlı çözümdür. Kanonik çözümler (örneğin :set ff=unix, :e ++ff=unix) aynı satır tarzında akım tampon uçlarının her satırını varsayalım. Bazen yaparlar; bazen değil. Sadface işaret.
Cecil Curry

97

Aşağıdaki komutu kullanmayı tercih ederim:

:set fileformat=unix

Ayrıca, macveya dosdosyanızı sırasıyla macintosh veya MS-DOS / MS-Windows dosya kuralına dönüştürmek için de kullanabilirsiniz . Ve dosya zaten doğru biçimde ise hiçbir şey yapmaz.

Daha fazla bilgi için vim yardımına bakın:

:help fileformat

1
Bu komut Windows vim üzerinde hiçbir şey yapmıyor gibi görünüyor. Benim ^Mgörüşümde hala karakter var.
Grant Birchmeier

set fileformat=unix.Vimrc dosyama ekleme işlemi yapıldı .
Joey Allen

20

:set fileformat=unix dos biriminden unix birimine dönüştürmek için.


1
Bu aslında benim için sorunu çözdü. Arama yaparken bu karakterleri bulamadım.
Kaptan Insaneo

20
:%s/\r+//g

Vim'de bu, tüm satır başlarını döndürür ve yalnızca satırsonu bırakır.


2
Yukarıdaki nedenlerden ötürü windows gvim altında benim için çalışmadı. Ama değiştiğinde :%s/\r//gbir cazibe gibi çalıştı.
soltysh

1
@soltysh:% s / \ r \ + $ // g
thinker3


10

Dos'den Unix'e Dosya Dizini Dönüştür

Komut satırı ve sed'i kullanarak geçerli dizindeki ".ext" uzantılı tüm dosyaları bulun ve "^ M" nin tümünü kaldırın

@ https://gist.github.com/sparkida/7773170

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

ayrıca, yukarıda belirtildiği gibi ^ M = Ctrl+V+ Ctrl+M(sadece "^" işaretini ve M harfini yazmayın)


9

dos2unix dosya içeriğini doğrudan değiştirebilir.

Geçici dosya yönlendirmesine gerek kalmadan doğrudan dosya üzerinde kullanabilirsiniz.

dos2unix input.txt input.txt

Yukarıda varsayılan ABD klavyesi kullanılır. -İngiltere klavyesini kullanmak için 437 seçeneğini kullanın.

dos2unix -437 input.txt input.txt



6

Aşağıdaki komutla:

:%s/^M$//g 

^MGörünen türü alın CtrlVo zaman CtrlM. CtrlVVim'e, girilen bir sonraki karakteri almasını söyler.


6

^ M'nin görünmesi hakkındaki yorum benim için işe yaradı. Sadece benim vi "^ M" yazmak hiçbir şey (bulunamadı) var. CTRL+ V CTRL+ MDizisi mükemmel olsa bunu yaptı.

Çalışma yerine koyma komutum

:%s/Ctrl-V Ctrl-M/\r/g

ve ekranımda şöyle görünüyordu:

:%s/^M/\r/g

4
Sen kullanabilirsiniz :%syerine :1,$s. %kısaltmasıdır 1,$.
Tin Man

5

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

Basın CTRL+ Okaydetmek için, ancak basmadan önce Enterbasın: ALT+ DDOS ve Unix / Linux hat-sonları betwen geçiş yapmak için, ya da: ALT+ MMac ve Unix / Linux hat-sonları betwen sonra basın geçiş yapmak için Enterkaydetmek ve CTRL+ Xçıkmak için.


bunu linux sunucusunda yaptı, dosyanın ^Msonları vardı . tutmak için dos olarak kaydedin, kaldırmak için linux olarak kaydedin. kullanarak kontrol edebilirsinizcat -v
HattrickNZ

Bu soru nano ile değil vim ile ilgilidir.
Grant Birchmeier

5
:g/Ctrl-v Ctrl-m/s///

CtrlM\rDOS satır sonlarının eklediği karakter veya satır başı. CtrlVvim'e CtrlMkomut satırına gerçek bir karakter eklemesini söyler .

Bir bütün olarak ele alındığında, bu komut hepsini \rhiçbir şeyle değiştirmez , satır sonlarından kaldırır.


4

Kullanabilirsiniz:

vim somefile.txt +"%s/\r/\r/g" +wq

veya dos2unix utility.


3

Aşağıdaki komutu kullanabilirsiniz:
:%s/^V^M//g
burada '^' CTRLanahtar kullan anlamına gelir .


2

Aşağıdaki komut, geçerli dizindeki tüm .sh dosyalarını yeniden biçimlendirmek için kullanılır, Fedora işletim sistemimde test ettim.

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done

2

Vim'de şunu yazın:

:w !dos2unix %

Bu, geçerli arabelleğinizin içeriğini dos2unix komutuna aktaracak ve sonuçları geçerli içeriklerin üzerine yazacaktır. Vim dosyayı yeniden yüklemeyi isteyecek


2

Doğrudan linux konsolunda çalıştırmak için: vim file.txt +"set ff=unix" +wq


1

Genellikle bunun için kullanabileceğiniz bir dos2unixkomut vardır, GNU ve BSD sürümleri argümanlarla nasıl başa çıktıklarına göre farklılık gösterdiğinden kılavuzu okuduğunuzdan emin olun.

BSD sürümü:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

GNU sürümü:

dos2unix $FILENAME

Alternatif olarak, dos2unixburada önerilen cevaplardan herhangi biriyle kendinizinkini oluşturabilirsiniz , örneğin:

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "${1}";
}

1

Bunu bir yerlerde gördüğümü biliyordum. İşte FreeBSD giriş ipucu:

Tüm bu ^ M karakterlerini bir DOS dosyasından kaldırmanız mı gerekiyor? Deneyin

tr -d \\r < dosfile > newfile
    -- Originally by Dru <genesis@istar.ca>

0

Bu konu çok eski olmasına rağmen, wikia'dan başka bir şey daha koymak istiyorum:

%s/\r\+$//g

bu dolgu satır sonuna kadar tüm satırbaşı işaretlerini (bir ve daha fazla tekrar) bulun ve silin, bu yüzden sadece \neol'de kalacaktır.


0

Bu benim yolum. Dos EOL'de bir dosya açtım ve dosyayı otomatik olarak unix EOL'ye dönüştürecek dosyayı kaydettiğimde

autocmd BufWrite * :set ff=unix

0

Windows'ta NotePad veya NotePad ++ ile bir dosya oluşturup Linux'a getirip vim ile açarsanız, her satırın sonunda ^ M görürsünüz. Bunu kaldırmak için,

Linux terminalinize şunu yazın

dos2unix dosyaadı.ext

Bu gerekli sihri yapacak.


0

^ M yerine satırsonu istedim. Kurtarmaya Perl:

perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt

Veya stdout'a yazmak için:

perl -p -e 's/\x0d/\n/g' < excel_created.txt
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.