^ ^ M nedir ve bundan nasıl kurtulurum?


134

Dosyayı vimaçtığımda garip ^Mkarakterler görüyorum .

Ne yazık ki, dünyanın en çok kullanılan arama motoru, sorgularda özel karakterlerle iyi sonuçlanmadığından, burada soruyorum:

  • Bu ^Mkarakter nedir?

  • Oraya nasıl ulaştı?

  • Ondan nasıl kurtulurum?


3
Vlastimil bu anlamsız bir düzenleme oldu. İngiliz İngilizcesinde yaşama zamanı geçmiş.
Jesse_b

1
Bu daha fazla bilgi için bir kontrol karakteri digraph verilmiştir: help digraph-table.
Eric Leschinski

Yanıtlar:


108

^MSatır başı karakteridir. Bunu görürseniz, muhtemelen, satır sonunun satır başı / satır çifti ile işaretlendiği DOS / Windows dünyasındaki bir dosyaya bakıyorsunuz, oysa Unix dünyasında satır sonu tek bir yeni satırla işaretlenir.

Daha fazla ayrıntı için bu makaleyi ve ayrıca newline için Wikipedia girdisini okuyun .

Bu makalede , farklı satır sonu işaretleyicileri olan dosyaları şeffaf bir şekilde düzenlemek için vim'in nasıl ayarlanacağı anlatılmaktadır.

^MBazı satırların sonunda bir dosyanız varsa ve onlardan kurtulmak istiyorsanız, bunu Vim'de kullanın:

:s/^M$//

( Bunu eklemek için Ctrl+ V Ctrl+ tuşlarına basın .)M^M


11
:%s/^M/\r/gBunun yerine yeni satır karakteriyle kaldırmayı ^Mve değiştirmeyi deneyin . Olmadan , komut yalnızca geçerli satır için geçerlidir. Ve çizginin sonunda olmayan bazı örneklerle karşılaştım , örneğin^M\r%^MThe first line.^MThe second line.
George

Veya çok fazla satır sonu istemiyorsanız, sadece yapabilirsiniz:%s/^M/
dikkatli olun1

2
Yalnızca bir satır başı gelirse, klasik (Unix öncesi) Macintosh satır sonu olabilir. Mac için Excel 2007 gibi yeni programlar bile bazı nedenlerden dolayı bunu yapıyor.
sudo

@larsks Ancak altap.cz/salamander/help/salamand/appendix_txtfiles^M , UNIX’de kullanıldığını söylüyor
Vivek

Bağlandığınız makale \n, doğru olan Unix'te kullanıldığını söylüyor . Bu ASCII kodudur 10, aksi halde bilinir ^J.
larsks

39

Çoğu UNIX işletim sisteminde dos2unix, CRLF'yi LF'ye dönüştürecek bir yardımcı program vardır . Diğer cevaplar “onlar ne” sorusunu kapsar.


36

Bunu yapmanın daha basit bir yolu aşağıdaki komutu kullanmaktır:

dos2unix filename

Bu komut aynı zamanda yol desenleriyle de çalışır.

dos2unix path/name*

Çalışmazsa, farklı mod kullanmayı deneyin:

dos2unix -c mac filename
  • -cDönüşüm modunu ayarlayın. : CONVMODE birini olduğunda ascii, 7bit, iso, macile asciivarsayılan olma.

22

Bu benim için çalıştı

:e ++ff=dos 

: E ++ ff = dos komutu, Vim'e dosyayı tekrar okumasını ve dos dosyası formatını zorlamasını söyler. Vim, CRLF ve yalnızca LF satır sonlarını kaldırarak arabellekteki her satırın yalnızca metnini bırakır.

sonra

:set ff=unix 

ve sonunda

:wq 

3
Teşekkürler! Bu benim için çalıştı, ancak kabul edilen çözüm yoktu
Bjorks bir hayranı

ffDosya formatını ifade ediyor mu ? Ne hakkında ++ff?
KcFnMi

: E ++ ff = dos komutu, Vim'e dosyayı tekrar okumasını ve dos dosyası formatını zorlamasını söyler. Vim, CRLF ve yalnızca LF satır sonlarını kaldırarak arabellekteki her satırın yalnızca metnini bırakır.
Stryker

10

Taşıma iadelerinden kurtulmanın başka bir yolu da tremirdir.

Buna benzeyen küçük bir senaryom var

#!/bin/sh
tmpfile=$(mktemp)
tr -d '\r' <"$1" >"$tmpfile"
mv "$tmpfile" "$1"

6

Bunu şu şekilde temizleyebilirsiniz sed:

sed -e 's/^M$//' < infile > outfile

İşin püf noktası taşıma dönüşüne nasıl girileceğidir. Genel olarak, C-v C-mdeğişmez satır başı iadesi girmek için yazmanız gerekir . Ayrıca sed ile çalışabilirsiniz

sed -i.bak -e 's/^M$//' infile

2

Bu nedir ^ M?
^ M, satır başı karakteridir. Bunu görürseniz, muhtemelen, satır sonunun satır başı / satır çifti ile işaretlendiği DOS / Windows dünyasındaki bir dosyaya bakıyorsunuz, oysa Unix dünyasında satır sonu tek bir yeni satırla işaretlenir.

Oraya nasıl sahip olabilir?
Dosya biçiminde değişiklik olduğunda.

Ondan nasıl kurtulurum?
dosyanızı ile açın

vim -b FILE_PATH

aşağıdaki komutu kullanarak kaydedin

:%s/^M//g

Yazıcınızı açmak için bir yazım hatası var .
Mateusz Piotrowski

4
Bu cevap diğer cevaplara bir şey eklemiyor. İlk paragraf, kabul edilen cevabın neredeyse yazılı bir kopyasıdır. Verilen kod hiçbir şeyi kaydetmez , ancak yalnızca satırbaşının tüm karakterlerini kaldırır . Ve dosyayı ikili modda açmanın burada nasıl yardımcı olacağından emin değilim.
Dubu

2

Benim durumumda,

Yukarıdaki hiçbir şey işe yaramadı, mac makinemden Linux makineye kopyalanan bir CSV dosyam vardı ve yukarıdaki komutların hepsini kullandım ama hiçbiri yardım etmedi

tr "\015" "\n" < inputfile > outputfile

Aşağıdaki gibi ^ M karakterlerinin satırlar arasında geçiş yaptığı bir dosyam vardı.

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,

0

Vim'i Ex modunda kullanabilirsiniz:

ex -bsc '%s/\r//|x' file
  1. -b ikili mod

  2. % tüm satırları seç

  3. s vekil

  4. \r satırbaşı

  5. x kaydet ve kapat


0

Aşağıdaki satırı ~ / .vimrc dosyasına ekleyin.

command! Tounix :call Preserve('1,$s/^M//')

Ardından, Windows satır sonlarına sahip bir dosyanız olduğunda, ": Tounix" komutunu çalıştırın.


-1

Geçmişte konfigürasyon dosyalarının bile düzgün bir şekilde ayrıştırılmadığını ve boşlukla ilgili şikayette bulunmadığını gördüm, ancak vi ve bir ayar listesi yaparsanız boşlukları göstermez, grep dosyaadı [[boşluk]] ​​size gösterecektir ^ M

o zaman dos2unix fileyardımcı olur


Bu cevap yeni bir şey getirmez, does2unix zaten en az iki cevapta çok daha eskiden bahseder.
Rui F Ribeiro
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.