Windows'da oluşturduğum dosyaları açarsam, satırların tümü ile biter ^M
.
Bu karakterleri bir kerede nasıl silebilirim?
Windows'da oluşturduğum dosyaları açarsam, satırların tümü ile biter ^M
.
Bu karakterleri bir kerede nasıl silebilirim?
Yanıtlar:
dos2unix bunu yapacak bir komut satırı yardımcı programıdır veya ^ M'yi girmek :%s/^M//g
için Ctrl- v Ctrl- mkullanırsanız veya :set ff=unix
vim 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.
:%s/^M//g
olmalıdır :%s/\r//g
, çünkü ^M
"satır başındaki" M "eşleme sermayesi" anlamına gelir.
:%s/\r//g
benim için çalıştı, şerefe @Bunyk
set ff=unix
hiçbir şey yapmaz. Belki dosyayı dönüştürür, ancak tüm ^M
karakterler hala oradadır.
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
:w +ff=unix
burada yazılı diğer şeylerin çoğundan çok daha güzel ve bash betiği güzel bir bonus.
:e
Komutlar yüklemek Vim benim Windows üzerinde hiçbir şey görünmüyor. Benim görüşüm hala ^M
kodları gösteriyor .
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 :)
:set ff=unix
, ancak bugün açtığım dosya özellikle garip olmalı. Vim zaten olduğunu fileformat=unix
ama bütün satır sonlarının olduğunu söyledi ^M
. Bu çözüm benim için çalıştı.
:%s/\r//g
onun yerine benim için çalışıyor.
:%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.
Aşağıdaki komutu kullanmayı tercih ederim:
:set fileformat=unix
Ayrıca, mac
veya dos
dosyanı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
^M
görüşümde hala karakter var.
set fileformat=unix
.Vimrc dosyama ekleme işlemi yapıldı .
:set fileformat=unix
dos biriminden unix birimine dönüştürmek için.
from: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
@ 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)
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
tr -d '\15\32' < winfile.txt > unixfile.txt
(bkz: http://kb.iu.edu/data/acux.html )
Aşağıdaki adımlar dos için dosya biçimini unix'e dönüştürebilir:
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using unix (LF-only) line endings.
Referans: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
^ 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
:%s
yerine :1,$s
. %
kısaltmasıdır 1,$
.
Ç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.
^M
sonları vardı . tutmak için dos olarak kaydedin, kaldırmak için linux olarak kaydedin. kullanarak kontrol edebilirsinizcat -v
Kullanabilirsiniz:
vim somefile.txt +"%s/\r/\r/g" +wq
veya dos2unix utility
.
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
Genellikle bunun için kullanabileceğiniz bir dos2unix
komut 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, dos2unix
burada önerilen cevaplardan herhangi biriyle kendinizinkini oluşturabilirsiniz , örneğin:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${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>
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 \n
eol'de kalacaktır.
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
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.
^ 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
hexdump -C badfile
ve0x0d 0x0a
"\r\n"
bunun sizin probleminiz olduğunu görürseniz .