Mi az `^ M` és hogyan szabadulhatok meg tőle?

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

  • Ez ‘ a vezérlő karakter átírását tartalmazza, további információkért info: help digraph-table.
  • A VS-kód alján található EOL opció, amely automatikusan átalakítja a nyitott fájlt.
  • @StackUnderflow használatkor VSCode, a vonalvégek LF-re történő módosítása a linuxos fájlokon végzett munka során segít. WSL-t használok … Egy olyan Windows fájlnak, mint a $ profile, nincs gond az LF végződésű Linux fájlokkal. Lehet, hogy a Win itt veri a Linuxot.

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^Mnincs a sor végén, példáulThe first line.^MThe second line.

  • vagy ha ne ‘ ne akarjon rengeteg sortörést, egyszerűen megteheti :%s/^M/
  • ha ez ‘ csak önmagában egy kocsi-visszatérés, ez lehet a klasszikus (Unix előtti) Macintosh-sortörés. Még néhány újabb program, például az Excel 2007 for Mac is ezt csinálja valamilyen oknál fogva.
  • @larsks But altap.cz/salamander/help/salamand/appember_txtfiles azt mondja, hogy a ^M -et UNIX-ban használják
  • Nem biztos benne, hogy ‘ tartalmaz-e valamit a vim configomban, de be kell írnom a következőt: 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ént ascii.

    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ódon dos2unix -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  
    1. -b bináris mód

    2. % az összes sor kijelölése

    3. s helyettesítés

    4. \r kocsi vissza

    5. 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.

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük