Når jeg åbner filen i Vim, ser jeg mærkelige ^M
tegn.
Desværre klarer verdens favoritsøgemaskine sig ikke godt med specialtegn i forespørgsler, så jeg spørger her:
-
Hvad er dette
^M
tegn? -
Hvordan kunne det være kommet dertil?
-
Hvordan slipper jeg af det?
Kommentarer
Svar
^M
er en vognretur. Hvis du ser dette, ser du sandsynligvis på en fil, der stammer fra DOS / Windows-verdenen, hvor en slutning af linjen er markeret med et parretur / ny linjepar, mens i Unix-verdenen slutningen af linjen er markeret med en enkelt ny linje.
Læs denne artikel for flere detaljer, og også Wikipedia-posten for newline .
Denne artikel diskuterer, hvordan man konfigurerer vim til transparent redigering af filer med forskellige slut- of-line markører.
Hvis du har en fil med ^M
i slutningen af nogle linjer, og du vil slippe af med dem, skal du bruge dette i Vim:
:s/^M$//
(Tryk på Ctrl + V Ctrl + M for at indsætte den ^M
.)
Kommentarer
- Prøv
:%s/^M/\r/g
i stedet for at fjerne^M
og erstatte^M
med newline-tegn . Uden%
gælder kommandoen kun for den aktuelle linje. Og jeg stødte på nogle eksempler, hvor^M
ikke er i slutningen af linjen, såsomThe first line.^MThe second line.
- Eller hvis du don ‘ ikke ønsker masser af linjeskift, du kan bare gøre
:%s/^M/
- Hvis det ‘ er bare en vognretur af sig selv, det kan være det klassiske Macintosh-linjeskift (før Unix). Selv nogle nyere programmer som Excel 2007 til Mac gør det af en eller anden grund.
- @larsks Men altap.cz/salamander/help/salamand/appendix_txtfiles siger, at
^M
bruges i UNIX - Ikke sikker på, om det ‘ er noget i min vim-konfiguration, men jeg skal skrive
Ctrl+Q
og derefterCtrl+M
for at få det tegn til at generere!
Svar
En enklere måde at gøre dette på er at bruge følgende kommando:
dos2unix filename
Denne kommando fungerer også med kurvemønstre. F.eks.
dos2unix path/name*
Hvis det ikke virker, så prøv at bruge en anden tilstand:
dos2unix -c mac filename
-
-c
Indstil konverteringstilstand. Hvor CONVMODE er en af:ascii, 7bit, iso, mac
medascii
som standard.
Kommentarer
- +1 for at nævne om -c-standardværdien og andre muligheder. Ved første forsøg havde standard ‘ ikke de forventede resultater. Med
dos2unix -c max
fungerede det.dos2unix: converting file launch_me.sh to Unix format...
- Fantastisk lille hjælpeprogram. For ubuntu skal du bare
apt-get install dos2unix
. Hvis du har brug for det rekursivt, kan du henvise til denne løsning her: stackoverflow.com/questions/11929461/… Jeg kørte det tåbeligt manuelt på hver mappe og tænkte kun at se efter det.
Svar
Dette fungerede for mig
:e ++ff=dos
Kommandoen: e ++ ff = dos fortæller Vim at læse filen igen og tvinger dos-filformat. Vim fjerner CRLF- og LF-eneste linieendelser og efterlader kun teksten for hver linje i bufferen.
derefter
:set ff=unix
og til sidst
:wq
Kommentarer
- tak! dette fungerede for mig, men den accepterede løsning fungerede ikke
- Henviser
ff
til filformat? Hvad med++ff
? - Kommandoen: e ++ ff = dos fortæller Vim at læse filen igen og tvinge dos-filformat. Vim fjerner CRLF- og LF-eneste linieendelser og efterlader kun teksten for hver linje i bufferen.
- For at lære om ff skal du udføre “: hjælp ff ”
- enkel og effektiv . Jeg er ikke sikker på, hvorfor cat file1 > > file2 introducerer dos line feeds, når fil 1 ikke ‘ t have det i første omgang
Svar
De fleste UNIX-operativsystemer har et værktøj kaldet dos2unix
der konverterer CRLF til LF. De andre svar dækker spørgsmålet om “hvad er de”.
Svar
En anden måde at slippe af med vognreturerne er med tr
kommando.
Jeg har et lille script, der ser sådan ud
#!/bin/sh tmpfile=$(mktemp) tr -d "\r" <"$1" >"$tmpfile" mv "$tmpfile" "$1"
Svar
Du kan rydde op med sed
:
sed -e "s/^M$//" < infile > outfile
Tricket er, hvordan man kommer korrekt ind i vognreturen. Generelt skal du skrive C-v C-m
for at indtaste en bogstavelig vognretur. Du kan også have sed-arbejde på plads med
sed -i.bak -e "s/^M$//" infile
Svar
Sed i -placering uden at skulle skrive specialtegnet (du kan kopiere dette, og det fungerer):
sed -i -e "s/\r//g" filename
Forklaring:
-i: in-place -e: regular expression \r: escaped carriage return /g: replace globally
Kommentarer
- Spørggeren redigerede allerede filen med VIM, note. Og der har været et sted
sed
svar på stedet siden 2012. - Ja, men en god, fungerende løsning manglede. Den eksisterende sed-løsning fungerer ikke ‘ t out-of-the-box.
- Dale Hagglund ‘ s i -sted
sed
bestemt fungerer uden for boksen. - Nå, ikke for mig. Jeg ‘ m på Ubuntu LTS 18.04.
- Dette hjalp mig med at redigere en fil på Alpine Linux fra et Windows-skrivebord, der ville tælle Ctrl M som en linjeretur, gør ovenstående svar ineffektive.
Svar
Hvad er dette ^ M?
^ M er en vognretur. Hvis du ser dette, ser du sandsynligvis på en fil, der stammer fra DOS / Windows-verdenen, hvor en slutning af linjen er markeret med et vognretur / nyt linjepar, mens i Unix-verdenen slutningen af linjen er markeret med en enkelt ny linje.
Hvordan kunne det være kommet dertil?
Når der er ændring i filformat.
Hvordan slipper jeg af med det?
åbn din fil med
vim -b FILE_PATH
gem den med følgende kommando
:%s/^M//g
Kommentarer
- Du ‘ har fået en tastefejl åbner din filr med .
- Dette svar tilføjer ikke noget til de andre svar. Første afsnit er en næsten ordret kopi fra det accepterede svar. Den givne kode vil ikke gemme noget, men bare fjern al vognretur tegn fra alle linjer. Og jeg er ikke sikker på, hvordan åbning af filen i binær tilstand vil være h elp her.
Svar
I mit tilfælde
Intet ovenfor fungerede, jeg havde kopieret en CSV-fil til Linux-maskinen fra min mac, og jeg brugte alle ovenstående kommandoer, men intet hjalp andet end nedenstående
tr "\015" "\n" < inputfile > outputfile
Jeg havde en fil, hvor ^ M-tegn blev sandwitched mellem linjer noget som nedenfor
Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
Kommentarer
-
mac2unix -n inputfile outputfile
eller ækvivalentdos2unix -c mac -n inputfile outputfile
håndterer den situation.
Svar
Du kan bruge Vim i Ex-tilstand:
ex -bsc "%s/\r//|x" file
-
-b
binær tilstand -
%
vælg alle linjer -
s
erstatning -
\r
vognretur -
x
gem og luk
Svar
Føj følgende linje til din ~ / .vimrc
command! Tounix :call Preserve("1,$s/^M//")
Kør derefter kommandoen “: Tounix”, når du har en fil med Windows-linieendelser.
Svar
Tidligere har jeg set, at selv konfigurationsfiler ikke parses ordentligt og klager over hvidt mellemrum, men hvis du vi og lav en sætliste, den vil ikke vise det hvide rum, grep filnavn [[space]] viser dig ^ M
at “s når dos2unix file
hjælper
Kommentarer
- Dette svar bringer ikke noget nyt, gør2unix allerede nævnt i det mindste i to svar meget mere ældre.
help digraph-table
.