Amikor megnyitom a fájlt a Vim-ben, furcsa ^M
karaktereket látok.
Sajnos a világ kedvenc keresőmotorja nem működik jól a speciális karakterekkel a lekérdezésekben, ezért itt kérdezem:
-
Mi ez a
^M
karakter? -
Hogyan kerülhetett oda?
-
Hogyan szabadulhatok meg tőle?
Megjegyzések
Válasz
A ^M
kocsi-vissza karakter. Ha ezt látja, akkor valószínűleg egy fájlt keres, amely a DOS / Windows világból származik, ahol a sor végét egy kocsi vissza / új sor pár jelöli, míg a Unix világban a sor vége egyetlen új vonallal van jelölve.
További részletekért olvassa el ezt a cikket , valamint a newline .
Ez a cikk azt tárgyalja, hogyan állítsuk be a vim-et különböző végű fájlok átlátható szerkesztésére. of-line markerek.
Ha van egy fájl, amelynek ^M
van néhány sor végén, és meg akar szabadulni tőlük, használja ezt a Vim-ben:
:s/^M$//
(Nyomja meg a Ctrl + V Ctrl + gombot M a ^M
beillesztéséhez.)
Megjegyzések
- Próbálja ki a
:%s/^M/\r/g
ehelyett a^M
eltávolításához és a^M
helyettesítéséhez
.%
nélkül a parancs csak az aktuális sorra vonatkozik. Találtam néhány példát, ahol a^M
nincs a sor végén, példáulThe first line.^MThe second line.
:%s/^M/
^M
-et UNIX-ban használják
Ctrl+Q
, majd Ctrl+M
, hogy a karaktert előállítsam! Válasz
Ennek egyszerűbb módja a következő parancs használata:
dos2unix filename
Ez a parancs útvonalmintákkal is működik, pl.
dos2unix path/name*
Ha nem működik, próbáljon meg más módot használni:
dos2unix -c mac filename
-
-c
Állítsa be a konverziós módot. Ha a CONVMODE az alábbiak egyike:ascii, 7bit, iso, mac
, alapértelmezettkéntascii
.
Megjegyzések
- +1 a -c jelző alapértelmezett értékének és egyéb lehetőségeinek megemlítéséhez. Első próbálkozáskor az alapértelmezett nem ‘ t nem érte el a várt eredmény. A
dos2unix -c max
alkalmazással működött.dos2unix: converting file launch_me.sh to Unix format...
- Elképesztő kis hasznosság. Az ubuntunál csak
apt-get install dos2unix
. Ha rekurzívan kell használni, itt hivatkozhat erre a megoldásra: stackoverflow.com/questions/11929461/… Ostobán futtattam minden könyvtárban manuálisan, és csak a tény után gondoltam.
Válasz
Ez nekem bevált
:e ++ff=dos
Az: e ++ ff = dos parancs arra utasítja Vim, hogy olvassa el a fájlt újra, kényszerítve a dos fájlformátumot. A Vim eltávolítja a CRLF és LF csak sorvégződéseket, csak az egyes sorok szövege marad a pufferben.
majd
:set ff=unix
és végül
:wq
Megjegyzések
- köszönöm! ez nekem bevált, de az elfogadott megoldás nem
- A
ff
fájlformátumra utal? Mi a helyzet a++ff
? - Az: e ++ ff = dos paranccsal utasítja Vim-et, hogy olvassa el újra a fájlt, és kényszeríti a dos fájlformátumot. A Vim eltávolítja a CRLF és LF csak sorvégződéseket, és csak az egyes sorok szövege marad a pufferben.
- Az ff megismeréséhez hajtsa végre az ” parancsot: help ff ”
- egyszerű és hatékony . Nem vagyok benne biztos, hogy a cat file1 > > fájl miért vezeti be a dos sorok hírcsatornáit, amikor az 1. fájl nem ‘ eleve nincs meg ez
Válasz
A legtöbb UNIX operációs rendszer rendelkezik dos2unix
amely a CRLF-et LF-vé konvertálja. A többi válasz a “mik ezek” kérdést fedi le.
Válasz
A szállítmány visszaküldésének másik módja a tr
parancs.
Van egy kicsi szkriptem, amely így néz ki
#!/bin/sh tmpfile=$(mktemp) tr -d "\r" <"$1" >"$tmpfile" mv "$tmpfile" "$1"
Válasz
Ezt megtisztíthatja a következővel: sed
:
sed -e "s/^M$//" < infile > outfile
A trükk az, hogyan kell helyesen beírni a kocsi-visszatérést. Általánosságban a C-v C-m
szót kell beírni a szó szerinti kocsivissza megadásához. A sed munkát a helyén is elvégezheti a
sed -i.bak -e "s/^M$//" infile
Válasz
-hely megoldás a speciális karakter beírása nélkül (ezt másolhatja, és működik):
sed -i -e "s/\r//g" filename
Magyarázat:
-i: in-place -e: regular expression \r: escaped carriage return /g: replace globally
Megjegyzések
- A kérdező már szerkesztette a fájlt VIM-mel, megjegyzés. És 2012 óta itt van egy helyben kapható válasz
sed
. - Igen, de hiányzott egy jó, működő megoldás. A meglévő sed megoldás ‘ nem működik a dobozból.
- Dale Hagglund ‘ s -hely
sed
leghatározottabban a dobozból működik. - Nos, nem nekem. ‘ m az Ubuntu LTS 18.04-en.
- Ez segített abban, hogy egy Windows asztalról szerkesszek egy fájlt az Alpine Linux rendszeren, amely a Ctrl M-t sor visszatérésnek számította, a fenti válaszok hatástalanná válása.
Válasz
Mi ez ^ M?
Az ^ M egy kocsi-vissza karakter. Ha ezt látja, akkor valószínűleg egy fájlt keres, amely a DOS / Windows világból származik, ahol a sor végét egy kocsi vissza / új sor pár jelöli, míg a Unix világban a sor vége egyetlen új vonallal van jelölve.
Hogyan kerülhetett oda?
Mikor van a fájlformátum változása.
Hogyan tudok megszabadulni tőle?
nyissa meg a fájl a következővel:
vim -b FILE_PATH
mentse a következő paranccsal
:%s/^M//g
Megjegyzések
- Ön ‘ elírási hibát kapott a fájl megnyitásával .
- Ez a válasz nem ad semmit a többi válaszhoz. Az első bekezdés szinte szó szerinti másolat az elfogadott válaszból. A megadott kód nem ment el semmit, csak eltávolítja az összes kocsi vissza karakter minden sorból. És nem vagyok biztos abban, hogy a fájl bináris módban történő megnyitása h itt elp.
Válasz
Az én esetemben
A fenti dolgok nem működtek, én CSV-fájlt másoltam le Linux gépre a mac-ról, és a fenti parancsokat használtam, de semmi sem segített, de az alábbiak
tr "\015" "\n" < inputfile > outputfile
Volt egy fájlom, amelyben ^ M karaktert elcsúsztattak a sorok között, például lent.
Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
Megjegyzések
-
mac2unix -n inputfile outputfile
, vagy ennek megfelelő módondos2unix -c mac -n inputfile outputfile
kezeli ezt a helyzetet.
Válasz
A Vim Ex módban is használható:
ex -bsc "%s/\r//|x" file
-
-b
bináris mód -
%
az összes sor kijelölése -
s
helyettesítés -
\r
kocsi vissza -
x
mentés és bezárás
Válasz
Adja hozzá a következő sort a ~ / .vimrc
command! Tounix :call Preserve("1,$s/^M//")
Ezután, ha van egy fájlja a Windows sorvégeivel, futtassa a “: Tounix” parancsot.
Válasz
Korábban láttam, hogy még a konfigurációs fájlokat sem elemezték megfelelően, és panaszkodtak a szóközökre, de ha vi és készítsen egy halmazlistát, amiben nem fog megjelenni a szóköz, a grep fájlnév [[szóköz]] megmutatja ^ M
ezt akkor, amikor dos2unix file
segít
Megjegyzések
- Ez a válasz nem hoz semmi újat, a did2unix-t már legalább két sokkal régebbi válasz említi.
help digraph-table
.