Mikä on `^ M` ja miten pääsen eroon siitä?

Kun avaan tiedoston Vimissä, näen outoja ^M merkkejä.

Valitettavasti maailman suosikki hakukone ei toimi hyvin erikoismerkkien kanssa kyselyissä, joten kysyn täältä:

  • Mikä tämä on ^M merkki?

  • Kuinka se olisi voinut päästä sinne?

  • Kuinka pääsen eroon siitä?

Kommentit

  • Se ’ ohjaa merkkien kaaviota, niin saat lisätietoja info: help digraph-table.
  • VS-koodin alaosassa on EOL-vaihtoehto, joka muuntaa avoimen tiedoston automaattisesti.
  • @StackUnderflow käytettäessä VSCode, rivinpäätteiden muuttaminen LF: ksi Linux-tiedostoja käsiteltäessä auttaa. Käytän WSL: ää … Windows-tiedostolla, kuten $ profile, ei ole ongelmaa Linux-tiedoston kanssa, joka päättyy LF: ään. Ehkä Win voittaa Linuxin täällä.

Vastaa

^M on kuljetus-paluu-merkki. Jos näet tämän, olet todennäköisesti tarkastelemassa tiedostoa, joka on peräisin DOS / Windows-maailmasta, jossa rivin loppu on merkitty vaunun paluu / uusi rivi -parilla, kun taas Unix-maailmassa rivin loppu on merkitty yhdellä uudella rivillä.

Lue tämä artikkeli saadaksesi lisätietoja ja myös Wikipedia-merkinnän kohdasta newline .

Tässä artikkelissa käsitellään VIM: n asettamista muokkaamaan avoimesti tiedostoja, joilla on erilainen pääte rivimerkkejä.

Jos sinulla on tiedosto, jossa on ^M joidenkin rivien lopussa ja haluat päästä eroon niistä, käytä tätä Vimissä:

:s/^M$// 

(Paina Ctrl + V Ctrl + M lisätäksesi ^M.)

Kommentit

  • Kokeile :%s/^M/\r/g sen sijaan, että poistat ^M ja korvataan ^M uudella rivillä . Ilman % komento koskee vain nykyistä riviä. Ja törmäsin joihinkin esimerkkeihin, joissa ^M ei ole rivin lopussa, kuten The first line.^MThe second line.
  • Tai jos älä ’ t halua kuormitettavia rivikatkoksia, voit vain tehdä :%s/^M/
  • jos se ’ on vain itsensä palautus, se voi olla klassinen (ennen Unixia) Macintosh-rivinvaihto. Jopa jotkin uudemmat ohjelmat, kuten Excel 2007 for Mac, tekevät sen jostain syystä.
  • @larsks But altap.cz/salamander/help/salamand/appember_txtfiles sanoo, että ^M käytetään UNIXissa
  • Etkö ole varma, onko se ’ jotain vim-määrityksessäni, mutta minun on kirjoitettava Ctrl+Q ja sitten Ctrl+M saadaksesi kyseisen merkin luomaan!

Vastaus

Yksinkertainen tapa tehdä tämä on käyttää seuraavaa komentoa:

dos2unix filename 

Tämä komento toimii myös polkumallien kanssa, esim.

dos2unix path/name* 

Jos se ei toimi, yritä käyttää eri tilaa:

dos2unix -c mac filename 
  • -c Aseta muuntotila. Jos CONVMODE on yksi seuraavista: ascii, 7bit, iso, mac oletusarvona ascii.

Kommentit

  • +1 -c-oletusarvon ja muiden vaihtoehtojen mainitsemiseksi. Ensimmäisellä yrityksellä oletusarvolla ’ t ei ollut odotettuja tuloksia. dos2unix -c max -toiminnolla se toimi. dos2unix: converting file launch_me.sh to Unix format...
  • Hämmästyttävä pieni apuohjelma. Ubuntulle vain apt-get install dos2unix. Jos haluat käyttää sitä rekursiivisesti, voit viitata tähän ratkaisuun täällä: stackoverflow.com/questions/11929461/… Juoksin sitä typerästi jokaisessa hakemistossa manuaalisesti ja ajattelin vain etsiä tosiasian jälkeen.

Vastaa

Tämä toimi minulle

:e ++ff=dos 

Komento: e ++ ff = dos käskee Vimiä lukemaan tiedoston uudelleen pakottaen dos-tiedostomuotoa. Vim poistaa vain CRLF- ja LF-rivirivit, jättäen puskuriin vain kunkin rivin tekstin.

sitten

:set ff=unix 

ja lopuksi

:wq 

kommentit

  • kiitos! tämä toimi minulle, mutta hyväksytty ratkaisu ei
  • viittaako ff tiedostomuotoon? Entä ++ff?
  • Komento: e ++ ff = dos käskee Vimiä lukemaan tiedoston uudelleen pakottaen dos-tiedostomuotoa. Vim poistaa vain CRLF- ja LF-rivirivit, jättäen puskuriin vain jokaisen rivin tekstin.
  • Jos haluat oppia ff: stä, suorita ”: help ff ”
  • yksinkertainen ja tehokas . En ole varma, miksi kissatiedosto1 > > tiedosto2 ottaa käyttöön dos-rivinsyötteet, kun tiedosto 1 ei ’ t: llä ei ole sitä ensin

Vastaus

Useimmissa UNIX-käyttöjärjestelmissä on apuohjelma dos2unix, joka muuntaa CRLF: n LF: ksi. Muut vastaukset kattavat ”mitä ne ovat” -kysymyksen.

Vastaus

Toinen tapa päästä eroon kuljetuspalautuksista on tr -komento.

Minulla on pieni komentosarja, joka näyttää tältä

#!/bin/sh tmpfile=$(mktemp) tr -d "\r" <"$1" >"$tmpfile" mv "$tmpfile" "$1" 

vastaus

Voit siivota tämän sed:

sed -e "s/^M$//" < infile > outfile 

Temppu on, kuinka syötät vaunun paluumatkan oikein. Yleensä sinun on kirjoitettava C-v C-m kirjoittaaksesi kirjaimellisen kuljetuspalautuksen. Voit myös asettaa sed-työn paikalleen

sed -i.bak -e "s/^M$//" infile 

Vastaa

kanssa -paikkaratkaisu tarvitsematta kirjoittaa erikoismerkkiä (voit kopioida tämän ja se toimii):

sed -i -e "s/\r//g" filename 

Selitys:

-i: in-place -e: regular expression \r: escaped carriage return /g: replace globally 

Kommentit

  • Kysyjä oli jo muokkaamassa tiedostoa VIM: llä, huomautus. Ja täällä on ollut paikan päällä oleva sed vastaus vuodesta 2012.
  • Joo, mutta hyvä, toimiva ratkaisu puuttui. Nykyinen sed-ratkaisu ’ ei toimi valmiina.
  • Dale Hagglund ’ s -paikka sed ehdottomasti toimii alusta.
  • No, ei minulle.

m Ubuntu LTS 18.04 -ohjelmassa.

  • Tämä auttoi minua muokkaamaan tiedostoa Alpine Linuxissa Windowsin työpöydältä, joka laskisi Ctrl M: n rivinpalautukseksi, tekee yllä olevista vastauksista tehottomia.
  • Vastaa

    Mitä onko tämä ^ M?
    ^ M on rivinvaihtomerkki. Jos näet tämän, olet todennäköisesti tarkastelemassa tiedostoa, joka on peräisin DOS / Windows-maailmasta, jossa rivin loppu on merkitty vaunun paluu / uusi rivi -parilla, kun taas Unix-maailmassa rivin loppu on merkitty yhdellä uudella rivillä.

    Kuinka se olisi voinut päästä sinne?
    Milloin on muutos tiedostomuodossa.

    Kuinka pääsen eroon siitä?
    avaa tiedosto, jossa on

    vim -b FILE_PATH 

    tallenna se seuraavalla komennolla

    :%s/^M//g 

    Kommentit

    • Sinulla ’ on kirjoitusvirhe avaamalla tiedostosi kanssa.
    • Tämä vastaus ei lisää mitään muihin vastauksiin. Ensimmäinen kappale on melkein sanatarkasti kopio hyväksytystä vastauksesta. Annettu koodi ei tallenna mitään, mutta vain poistaa kaikki paluupalautukset merkkejä kaikilta riveiltä. Enkä ole varma, kuinka tiedoston avaaminen binaaritilassa h täältä.

    Vastaa

    Minun tapauksessani

    Mikään yllä ei toiminut, minä oli kopioinut CSV-tiedoston Linux-koneelle Macistani ja käytin kaikkia yllä olevia komentoja, mutta mikään ei auttanut, mutta alla oleva

    tr "\015" "\n" < inputfile > outputfile 

    Minulla oli tiedosto, ^ M merkkiä hajautettiin rivien väliin, kuten alla.

    Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico, 

    Kommentit

    • mac2unix -n inputfile outputfile tai vastaavasti dos2unix -c mac -n inputfile outputfile hoitaa tilanteen.

    Vastaa

    Voit käyttää Vimiä Ex-tilassa:

     ex -bsc "%s/\r//|x" file  
    1. iv -b binaaritila

    2. % valitse kaikki rivit

    3. s korvike

    4. \r rivinvaihto

    5. x tallenna ja sulje

    Vastaa

    Lisää seuraava rivi ~ / .vimrc-tiedostoosi

    command! Tounix :call Preserve("1,$s/^M//") 

    Kun sinulla on tiedosto, jossa on Windowsin rivin loppu, suorita komento ”: Tounix”.

    vastaus

    Aiemmin olen nähnyt, että edes määritystiedostoja ei ole jäsennelty oikein ja valittanut tyhjää tilaa, mutta jos vi ja tee asetettu luettelo, jota se ei voinut näyttää välilyönnillä, grep-tiedostonimi [[välilyönti]] näyttää sinulle ^ M

    että ”s kun dos2unix file auttaa

    Kommentit

    • Tämä vastaus ei tuo mitään uutta, did2unix mainitaan jo ainakin kahdessa vastauksessaan paljon vanhemmassa.

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *