Când deschid fișierul în Vim, văd caractere ciudate ^M
.
Din păcate, motorul de căutare preferat al lumii nu se descurcă bine cu caracterele speciale din interogări, așa că întreb aici:
-
Ce este acest
^M
caracter? -
Cum ar fi putut ajunge acolo?
-
Cum scap de el?
Comentarii
Răspuns
^M
este un personaj de întoarcere la trăsură. Dacă vedeți acest lucru, probabil că vă uitați la un fișier care a apărut în lumea DOS / Windows, unde un sfârșit de linie este marcat de o pereche returnare / linie nouă, în timp ce în lumea Unix, sfârșitul liniei este marcat de o singură linie nouă.
Citiți acest articol pentru mai multe detalii, precum și intrarea Wikipedia pentru newline .
Acest articol discută despre cum să configurați vim pentru a edita în mod transparent fișiere cu diferite marcatori de linie.
Dacă aveți un fișier cu ^M
la sfârșitul unor linii și doriți să scăpați de ele, utilizați acest lucru în Vim:
:s/^M$//
(Apăsați pe Ctrl + V Ctrl + M pentru a insera ^M
.)
Comentarii
- Încercați
:%s/^M/\r/g
în loc să eliminați^M
și înlocuiți^M
cu caracterul newline . Fără%
, comanda se aplică numai pentru linia curentă. Și am dat peste câteva exemple în care^M
nu se află la sfârșitul liniei, cum ar fiThe first line.^MThe second line.
- Sau dacă nu ‘ nu doriți o mulțime de întreruperi de linie pe care le puteți face doar
:%s/^M/
- Dacă ‘ este doar o întoarcere de la căruță, care ar putea fi clasica (pre-Unix) linie de linie Macintosh. Chiar și unele programe mai noi, cum ar fi Excel 2007 pentru Mac, fac acest lucru dintr-un anumit motiv.
- @larsks Dar altap.cz/salamander/help/salamand/appendix_txtfiles spune că
^M
este utilizat în UNIX - Nu sunt sigur dacă ‘ este ceva în configurația mea vim, dar trebuie să scriu
Ctrl+Q
, apoiCtrl+M
pentru a genera acel caracter!
Răspuns
O modalitate mai simplă de a face acest lucru este să folosiți următoarea comandă:
dos2unix filename
Această comandă funcționează și cu modele de cale, de ex.
dos2unix path/name*
Dacă nu funcționează, încercați să utilizați un mod diferit:
dos2unix -c mac filename
-
-c
Setați modul de conversie. În cazul în care CONVMODE este unul dintre:ascii, 7bit, iso, mac
cuascii
fiind implicit.
Comentarii
- +1 pentru menționarea valorii implicite a steagului -c și a altor opțiuni. La prima încercare, valoarea implicită nu ‘ nu a avut rezultatele scontate. Cu
dos2unix -c max
a funcționat.dos2unix: converting file launch_me.sh to Unix format...
- Puțină utilitate uimitoare. Pentru ubuntu doar
apt-get install dos2unix
. Dacă trebuie să o utilizați recursiv, puteți consulta această soluție aici: stackoverflow.com/questions/11929461/… L-am rulat prostește în fiecare director manual și m-am gândit doar să caut după fapt.
Răspuns
Acest lucru a funcționat pentru mine
:e ++ff=dos
Comanda: e ++ ff = dos îi spune lui Vim să citească din nou fișierul, forțând formatul de fișier dos. Vim va elimina terminările de linie numai CRLF și LF, lăsând doar textul fiecărei linii în buffer.
apoi
:set ff=unix
și în sfârșit
:wq
Comentarii
- mulțumesc! acest lucru a funcționat pentru mine, dar soluția acceptată nu a fost
-
ff
se referă la formatul de fișier? Ce zici de++ff
? - Comanda: e ++ ff = dos îi spune lui Vim să citească din nou fișierul, forțând formatul de fișier dos. Vim va elimina terminările de linie numai CRLF și LF, lăsând doar textul fiecărei linii în buffer.
- Pentru a afla despre ff, executați „: ajutor ff ”
- simplu și eficient . Nu sunt sigur de ce pisica file1 > > file2 introduce dos line feed-uri când fișierul 1 nu ‘ nu îl aveți în primul rând
Răspuns
Majoritatea sistemelor de operare UNIX au un utilitar numit dos2unix
care va converti CRLF în LF. Celelalte răspunsuri acoperă întrebarea „ce sunt ele”.
Răspuns
Un alt mod de a scăpa de returnările de transport este cu tr
comandă.
Am un mic script care arată astfel
#!/bin/sh tmpfile=$(mktemp) tr -d "\r" <"$1" >"$tmpfile" mv "$tmpfile" "$1"
Răspuns
Puteți curăța acest lucru cu sed
:
sed -e "s/^M$//" < infile > outfile
Trucul este cum să introduceți corect transportul-retur. În general, trebuie să tastați C-v C-m
pentru a introduce o returnare literală a transportului. Puteți, de asemenea, să lucrați la sediu cu
sed -i.bak -e "s/^M$//" infile
Răspundeți
Sed în -soluție fără a fi nevoie să tastați caracterul special (puteți copia acest lucru și funcționează):
sed -i -e "s/\r//g" filename
Explicație:
-i: in-place -e: regular expression \r: escaped carriage return /g: replace globally
Comentarii
- Persoana care a întrebat-o edita deja fișierul cu VIM, notă. Și a existat un răspuns la locul
sed
aici din 2012. - Da, dar lipsea o soluție bună și funcțională. Soluția sed existentă nu funcționează ‘ nu funcționează imediat.
- Dale Hagglund ‘ este în -place
sed
cel mai sigur nu funcționează din cutie. - Ei bine, nu pentru mine. Am ‘ m pe Ubuntu LTS 18.04.
- Acest lucru m-a ajutat să editez un fișier pe Alpine Linux de pe un desktop Windows care să numere Ctrl M ca o linie de retur, făcând ineficiente răspunsurile de mai sus.
Răspuns
Ce este acesta ^ M?
^ M este un caracter de întoarcere. Dacă vedeți acest lucru, probabil că vă uitați la un fișier care a apărut în lumea DOS / Windows, unde un sfârșit de linie este marcat de o pereche returnare / linie nouă, în timp ce în lumea Unix, sfârșitul liniei este marcat de o singură linie nouă.
Cum ar fi putut ajunge acolo?
Când există este schimbarea formatului de fișier.
Cum scap de el?
deschideți fișier cu
vim -b FILE_PATH
salvează-l cu următoarea comandă
:%s/^M//g
Comentarii
- ‘ ai primit o greșeală de greșeală în deschiderea filrului cu .
- Acest răspuns nu adaugă nimic la celelalte răspunsuri. Primul paragraf este o copie aproape textuală din răspunsul acceptat. Codul dat nu va salva nimic, ci doar elimină toate returnările de transport caractere din toate rândurile. Și nu sunt sigur cum va deschide fișierul în modul binar elp aici.
Răspuns
În cazul meu,
Nimic de mai sus nu a funcționat, eu am copiat un fișier CSV pe mașina Linux de pe mac-ul meu și am folosit toate comenzile de mai sus, dar nimic nu a ajutat decât cel de mai jos
tr "\015" "\n" < inputfile > outputfile
Am avut un fișier în care ^ M caractere au fost comutate cu nisip între rânduri ceva de genul
Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
Comentarii
-
mac2unix -n inputfile outputfile
sau, în mod echivalent,dos2unix -c mac -n inputfile outputfile
se va ocupa de situația respectivă.
Răspuns
Puteți utiliza Vim în modul Ex:
ex -bsc "%s/\r//|x" file
-
-b
mod binar -
%
selectați toate liniile -
s
substitut -
\r
returnare transport -
x
salvare și închidere
Răspuns
Adăugați următoarea linie în ~ / .vimrc
command! Tounix :call Preserve("1,$s/^M//")
Apoi, când aveți un fișier cu terminările de linie Windows, rulați comanda „: Tounix”.
Răspuns
În trecut, am văzut că fișierele de configurare nu sunt analizate corect și se plâng de spațiul alb, dar dacă vi și faceți o listă de seturi pe care a câștigat-o „nu afișați spațiul alb, numele fișierului grep [[spațiu]] vă va arăta ^ M
că” s când dos2unix file
vă ajută
Comentarii
- Acest răspuns nu aduce nimic nou, does2unix este deja menționat cel puțin în două răspunsuri mult mai vechi.
help digraph-table
.