^ ^ 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.