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
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, kutenThe 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 sittenCtrl+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
oletusarvonaascii
.
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.
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 vastaavastidos2unix -c mac -n inputfile outputfile
hoitaa tilanteen.
Vastaa
Voit käyttää Vimiä Ex-tilassa:
ex -bsc "%s/\r//|x" file
-
iv
-b
binaaritila -
%
valitse kaikki rivit -
s
korvike -
\r
rivinvaihto -
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.
help digraph-table
.