När jag öppnar filen i Vim ser jag konstiga ^M
tecken.
Tyvärr går världens favoritsökmotor inte bra med specialtecken i frågor, så jag frågar här:
-
Vad är detta
^M
karaktär? -
Hur kunde det ha kommit dit?
-
Hur blir jag av med det?
Kommentarer
Svar
^M
är en vagnreturkaraktär. Om du ser detta tittar du förmodligen på en fil som har sitt ursprung i DOS / Windows-världen, där en slutsträng är markerad med ett vagnretur / nylinjepar, medan i Unixvärlden markeras av en enda ny rad.
Läs den här artikeln för mer information, och även Wikipedia-posten för newline .
Denna artikel diskuterar hur du ställer in vim för att transparent redigera filer med olika slut- of-line markörer.
Om du har en fil med ^M
i slutet av vissa rader och du vill bli av med dem, använd den här i Vim:
:s/^M$//
(Tryck Ctrl + V Ctrl + M för att infoga den ^M
.)
Kommentarer
- Försök
:%s/^M/\r/g
istället för att ta bort^M
och ersätt^M
med newline-tecken . Utan%
gäller kommandot endast för aktuell rad. Och jag stötte på några exempel där^M
inte är i slutet av raden, till exempelThe first line.^MThe second line.
- Eller om du don ’ vill inte ha massor av radbrytningar kan du bara göra
:%s/^M/
- Om det ’ är bara en vagnretur av sig själv, det kan vara den klassiska (före Unix) Macintosh-linjen. Även vissa nyare program som Excel 2007 för Mac gör det av någon anledning.
- @larsks Men altap.cz/salamander/help/salamand/appendix_txtfiles säger att
^M
används i UNIX - Inte säker på om det ’ är något i min vim-konfiguration, men jag måste skriva
Ctrl+Q
och sedanCtrl+M
för att få den karaktären att generera!
Svar
Ett enklare sätt att göra detta är att använda följande kommando:
dos2unix filename
Det här kommandot fungerar också med sökmönster, t.ex.
dos2unix path/name*
Om det inte fungerar, försök använda ett annat läge:
dos2unix -c mac filename
-
-c
Ställ in omvandlingsläge. Där CONVMODE är en av:ascii, 7bit, iso, mac
medascii
som standard.
Kommentarer
- +1 för att nämna standard-värdet för flaggan -c och andra alternativ. Vid första försöket hade standardvärdet ’ inte de förväntade resultaten. Med
dos2unix -c max
fungerade det.dos2unix: converting file launch_me.sh to Unix format...
- Fantastiskt litet verktyg. För ubuntu bara
apt-get install dos2unix
. Om du behöver använda den rekursivt kan du hänvisa till den här lösningen här: stackoverflow.com/questions/11929461/… Jag körde det dåraktigt i varje katalog manuellt och tänkte bara leta efter faktum.
Svar
Detta fungerade för mig
:e ++ff=dos
Kommandot: e ++ ff = dos ber Vim att läsa filen igen och tvingar dosfilformat. Vim tar bort CRLF- och LF-enda radändar och lämnar endast texten för varje rad i bufferten.
sedan
:set ff=unix
och slutligen
:wq
Kommentarer
- tack! detta fungerade för mig men den accepterade lösningen inte
- Avser
ff
filformat? Vad sägs om++ff
? - Kommandot: e ++ ff = dos säger till Vim att läsa filen igen och tvingar dosfilformat. Vim tar bort CRLF- och endast LF-radändar och lämnar endast texten för varje rad i bufferten.
- För att lära dig mer om ff, kör ”: hjälp ff ”
- enkelt och effektivt . Jag är inte säker på varför cat file1 > > file2 introducerar doslinjeflöden när fil 1 inte ’ t har det i första hand
Svar
De flesta UNIX-operativsystem har ett verktyg som heter dos2unix
som konverterar CRLF till LF. De andra svaren täcker frågan ”vad är de”.
Svar
Ett annat sätt att bli av med vagnreturer är med tr
-kommando.
Jag har ett litet skript som ser ut så här
#!/bin/sh tmpfile=$(mktemp) tr -d "\r" <"$1" >"$tmpfile" mv "$tmpfile" "$1"
Svar
Du kan städa upp det med sed
:
sed -e "s/^M$//" < infile > outfile
Tricket är hur man går in i vagnreturen ordentligt. Generellt måste du skriva C-v C-m
för att ange en bokstavlig vagnretur. Du kan också ha sed-arbete på plats med
sed -i.bak -e "s/^M$//" infile
Svar
Sed in -platslösning utan att behöva skriva specialtecknet (du kan kopiera detta och det fungerar):
sed -i -e "s/\r//g" filename
Förklaring:
-i: in-place -e: regular expression \r: escaped carriage return /g: replace globally
Kommentarer
- Frågeställaren redigerade redan filen med VIM, not. Och det har funnits ett
sed
svar på plats här sedan 2012. - Ja, men en bra, fungerande lösning saknades. Den befintliga sed-lösningen fungerar inte ’ t-out-of-the-box.
- Dale Hagglund ’ s i -plats
sed
definitivt fungerar ur lådan. - Tja, inte för mig. Jag ’ m på Ubuntu LTS 18.04.
- Detta hjälpte mig att redigera en fil på Alpine Linux från ett Windows-skrivbord som skulle räkna Ctrl M som en radretur, göra ovanstående svar ineffektiva.
Svar
Vad är det här ^ M?
^ M är ett vagnretur. Om du ser detta tittar du förmodligen på en fil som har sitt ursprung i DOS / Windows-världen, där en slutsträng markeras av ett vagnretur / nylinjepar, medan i Unixvärlden markeras av en enda ny rad.
Hur kunde det ha kommit dit?
När det är ändring i filformat.
Hur blir jag av med det? – öppna din fil med
vim -b FILE_PATH
spara den med följande kommando
:%s/^M//g
Kommentarer
- Du ’ har fått ett stavfel i öppna din filr med .
- Detta svar lägger inte till något till de andra svaren. Första stycket är en nästan fullständig kopia från det accepterade svaret. Den givna koden kommer inte att spara någonting, men bara ta bort all transportretur tecken från alla rader. Och jag är inte säker på hur man öppnar filen i binärt läge elp här.
Svar
I mitt fall
Ingenting ovan fungerade, jag hade kopierat en CSV-fil till Linux-maskinen från min mac och jag använde alla ovanstående kommandon men ingenting hjälpte utom den nedan
tr "\015" "\n" < inputfile > outputfile
Jag hade en fil där ^ M-tecken sandbyttes mellan raderna något liknande nedan
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, likvärdigt,dos2unix -c mac -n inputfile outputfile
hanterar den situationen.
Svar
Du kan använda Vim i Ex-läge:
ex -bsc "%s/\r//|x" file
-
-b
binärt läge -
%
välj alla rader -
s
ersättare -
\r
vagnretur -
x
spara och stäng
Svar
Lägg till följande rad i din ~ / .vimrc
command! Tounix :call Preserve("1,$s/^M//")
Kör sedan kommandot ”: Tounix” när du har en fil med Windows-radändarna.
Svar
Tidigare har jag sett att även konfigurationsfilerna inte analyseras ordentligt och klagar på blanksteg, men om du och gör en lista som inte visar det vita utrymmet, grep filnamn [[space]] visar dig ^ M
att ”s när dos2unix file
hjälper
Kommentarer
- Det här svaret ger inte något nytt, do2unix nämns redan åtminstone i två svar mycket mer äldre.
help digraph-table
.