Jeśli to zrobisz hexdump -C badfilei zobaczysz, 0x0d 0x0a"\r\n"że to twój problem.
Yzmir Ramirez
Odpowiedzi:
1074
dos2unix to narzędzie wiersza poleceń, które to zrobi, lub zrobi to, :%s/^M//gjeśli użyjesz Ctrl- vCtrl- mdo wprowadzenia ^ M, lub możesz :set ff=unixi vim zrobi to za ciebie.
Alternatywnie, jeśli często przenosisz pliki tam i z powrotem, możesz nie chcieć ich konwertować, ale raczej zrobić :set ff=dos, więc vim będzie wiedział, że to plik DOS i użyje konwencji DOS dla zakończeń linii.
Dziękuję Ci bardzo. Próbowałem vi + ': wq ++ ff = unix' <ścieżka pliku> dla leniwego takiego jak ja.
a_secenthusiast
2
To powinna być najbardziej pozytywna odpowiedź. :w +ff=unixjest o wiele ładniejszy niż większość innych tu napisanych rzeczy, a skrypt bash jest miłym dodatkiem.
mkasberg,
Wydaje się, że :epolecenia nie działają w mojej instalacji Windows vim. Mój widok wciąż pokazuje ^Mkody.
Grant Birchmeier,
160
Zwykle używam
:%s/\r/\r/g
co wydaje się trochę dziwne, ale działa ze względu na sposób, w jaki vim dopasowuje linie. Łatwiej mi też zapamiętać :)
Działa to konsekwentnie na różnych platformach. Najlepsza odpowiedź tutaj.
thebigjc
4
Nigdy wcześniej nie miałem z tym problemu :set ff=unix, ale plik, który otworzyłem dzisiaj, musiał być szczególnie dziwny. Vim powiedział, że już było, fileformat=unixale wszystkie zakończenia linii były ^M. To rozwiązanie działało dla mnie.
Chris B
15
To rozwiązanie dodaje dla mnie niepożądane dodatkowe linie, podwajając liczbę linii w pliku. :%s/\r//gzamiast tego działa dla mnie.
Victor Zamanian
3
Victor, Twoje pliki prawdopodobnie mają \ r \ n końcówki. \ r nie jest czytany jako nowy wiersz, ale \ n jest. W plikach, na które wpadam są \ r i musisz dodać znak nowej linii.
Joeyjoejoejr
2
@ VictorZamanian's :%s/\r//gjest jedynym rozwiązaniem ogólnego zastosowania - szczególnie dla plików w trybie mieszanym zawierających heterogeniczną domieszkę nowych linii w stylu DOS i UNIX. Rozwiązania kanoniczne (np. ) Zakładają :set ff=unix, :e ++ff=unixże każda linia bieżącego bufora kończy się w tym samym stylu nowej linii. Czasami tak; czasami nie. Cue sadface.
Cecil Curry,
97
Wolę użyć następującego polecenia:
:set fileformat=unix
Możesz także użyć maclub dosodpowiednio przekonwertować plik na konwencję plików Macintosh lub MS-DOS / MS-Windows. I nic nie robi, jeśli plik ma już prawidłowy format.
+1 za wskazanie oficjalnej strony z dokumentami. Dla każdego, kto korzysta z powyższego linku, zobacz sekcję „Konwertowanie bieżącego pliku” na tej stronie.
Tin Man
To + vim -b <nazwa_pliku> działało jak urok, dzięki, +1
Jan Molak
10
Konwertuj katalog plików z dos na Unix
Za pomocą wiersza polecenia i sed znajdź wszystkie pliki w bieżącym katalogu z rozszerzeniem „.ext” i usuń wszystkie „^ M”
Poniższe kroki mogą przekonwertować format pliku dos na unix:
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using unix (LF-only) line endings.
Komentowanie pojawienia się ^ M było tym, co zadziałało dla mnie. Samo wpisanie „^ M” w moim vi nic nie dało (nie znaleziono). Sekwencja CTRL+ VCTRL+ Mzrobiła to jednak doskonale.
Możesz użyć :%szamiast :1,$s. %jest skrótem od 1,$.
Tin Man
5
Znalazłem bardzo prosty sposób: Otwórz plik za pomocą nano: nano file.txt
Naciśnij CTRL+, Oaby zapisać, ale przed naciśnięciem Enternaciśnij: ALT+, Daby przełączyć między zakończeniami linii DOS i Unix / Linux lub: ALT+, Maby przełączyć między zakończeniami linii Mac i Unix / Linux, a następnie naciśnij, Enteraby zapisać i CTRL+, Xaby wyjść.
zrobiłem to na serwerze linux, plik miał ^Mzakończenia. zapisz jako dos, aby zachować, zapisz jako Linux, aby usunąć. można to sprawdzić za pomocącat -v
HattrickNZ
To pytanie dotyczy vima, a nie nano.
Grant Birchmeier,
5
:g/Ctrl-v Ctrl-m/s///
CtrlMto znak \rlub znak powrotu karetki, które dodają zakończenia linii DOS. CtrlVmówi vimowi, aby wstawił literalny CtrlMznak w linii poleceń.
Podsumowując, to polecenie zastępuje wszystko \rniczym, usuwając je z końców linii.
Spowoduje to przesłanie zawartości bieżącego bufora do polecenia dos2unix i zapisanie wyników nad bieżącą zawartością. Vim poprosi o ponowne załadowanie pliku po
Zwykle dos2unixmożesz użyć do tego polecenia, po prostu przeczytaj instrukcję, ponieważ wersje GNU i BSD różnią się tym, jak radzą sobie z argumentami.
jeśli utworzysz plik w NotePad lub NotePad ++ w systemie Windows i przeniesiesz go do Linuksa i otworzysz przez vima, zobaczysz ^ M na końcu każdej linii. Aby to usunąć,
hexdump -C badfile
i zobaczysz,0x0d 0x0a
"\r\n"
że to twój problem.Odpowiedzi:
dos2unix to narzędzie wiersza poleceń, które to zrobi, lub zrobi to,
:%s/^M//g
jeśli użyjesz Ctrl- v Ctrl- mdo wprowadzenia ^ M, lub możesz:set ff=unix
i vim zrobi to za ciebie.Dokumenty dotyczące ustawienia „format pliku” są tutaj , a wiki vim ma obszerną stronę konwersji kończących linię .
Alternatywnie, jeśli często przenosisz pliki tam i z powrotem, możesz nie chcieć ich konwertować, ale raczej zrobić
:set ff=dos
, więc vim będzie wiedział, że to plik DOS i użyje konwencji DOS dla zakończeń linii.źródło
:%s/^M//g
powinno być:%s/\r//g
, ponieważ^M
po prostu oznacza „dopasuj kapitał” M „na początku linii”.:%s/\r//g
działało dla mnie, pozdrawiam @Bunykset ff=unix
nic nie robi. Może konwertuje plik, ale wszystkie^M
znaki wciąż tam są.Zmień zakończenia linii w widoku:
Można to również wykorzystać jako operację zapisywania (: sam w nie zapisuje przy użyciu zakończeń linii widocznych na ekranie):
I możesz go użyć z wiersza polecenia:
źródło
:w +ff=unix
jest o wiele ładniejszy niż większość innych tu napisanych rzeczy, a skrypt bash jest miłym dodatkiem.:e
polecenia nie działają w mojej instalacji Windows vim. Mój widok wciąż pokazuje^M
kody.Zwykle używam
co wydaje się trochę dziwne, ale działa ze względu na sposób, w jaki vim dopasowuje linie. Łatwiej mi też zapamiętać :)
źródło
:set ff=unix
, ale plik, który otworzyłem dzisiaj, musiał być szczególnie dziwny. Vim powiedział, że już było,fileformat=unix
ale wszystkie zakończenia linii były^M
. To rozwiązanie działało dla mnie.:%s/\r//g
zamiast tego działa dla mnie.:%s/\r//g
jest jedynym rozwiązaniem ogólnego zastosowania - szczególnie dla plików w trybie mieszanym zawierających heterogeniczną domieszkę nowych linii w stylu DOS i UNIX. Rozwiązania kanoniczne (np. ) Zakładają:set ff=unix
,:e ++ff=unix
że każda linia bieżącego bufora kończy się w tym samym stylu nowej linii. Czasami tak; czasami nie. Cue sadface.Wolę użyć następującego polecenia:
Możesz także użyć
mac
lubdos
odpowiednio przekonwertować plik na konwencję plików Macintosh lub MS-DOS / MS-Windows. I nic nie robi, jeśli plik ma już prawidłowy format.Aby uzyskać więcej informacji, zobacz pomoc vima:
źródło
^M
znaki.set fileformat=unix
Działa dodawanie do mojego pliku .vimrc.:set fileformat=unix
przekonwertować z dos na unix.źródło
W Vimie usuwa wszystkie powrotne karetki i pozostawia tylko nowe linie.
źródło
:%s/\r//g
działał jak urok.z: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
źródło
Konwertuj katalog plików z dos na Unix
Za pomocą wiersza polecenia i sed znajdź wszystkie pliki w bieżącym katalogu z rozszerzeniem „.ext” i usuń wszystkie „^ M”
@ https://gist.github.com/sparkida/7773170
także, jak wspomniano powyżej ^ M = Ctrl+V+ Ctrl+M(nie wpisuj po prostu symbolu karetki „^” i M)
źródło
dos2unix
może bezpośrednio modyfikować zawartość pliku.Możesz użyć go bezpośrednio w pliku, bez potrzeby tymczasowego przekierowania pliku.
Powyżej używa założonej klawiatury amerykańskiej. Użyj
-
opcji 437, aby korzystać z klawiatury brytyjskiej.źródło
(patrz: http://kb.iu.edu/data/acux.html )
źródło
Poniższe kroki mogą przekonwertować format pliku dos na unix:
Odniesienie: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
źródło
Za pomocą następującego polecenia:
Dostać
^M
się pojawiać typ CtrlVpotem CtrlM. CtrlVmówi Vimowi, by wziął następną literę wpisaną dosłownie.źródło
Komentowanie pojawienia się ^ M było tym, co zadziałało dla mnie. Samo wpisanie „^ M” w moim vi nic nie dało (nie znaleziono). Sekwencja CTRL+ V CTRL+ Mzrobiła to jednak doskonale.
Moje działające polecenie zastępowania było
i wyglądało to tak na moim ekranie:
źródło
:%s
zamiast:1,$s
.%
jest skrótem od1,$
.Znalazłem bardzo prosty sposób: Otwórz plik za pomocą nano:
nano file.txt
Naciśnij CTRL+, Oaby zapisać, ale przed naciśnięciem Enternaciśnij: ALT+, Daby przełączyć między zakończeniami linii DOS i Unix / Linux lub: ALT+, Maby przełączyć między zakończeniami linii Mac i Unix / Linux, a następnie naciśnij, Enteraby zapisać i CTRL+, Xaby wyjść.
źródło
^M
zakończenia. zapisz jako dos, aby zachować, zapisz jako Linux, aby usunąć. można to sprawdzić za pomocącat -v
CtrlMto znak
\r
lub znak powrotu karetki, które dodają zakończenia linii DOS. CtrlVmówi vimowi, aby wstawił literalny CtrlMznak w linii poleceń.Podsumowując, to polecenie zastępuje wszystko
\r
niczym, usuwając je z końców linii.źródło
Możesz użyć:
lub
dos2unix utility
.źródło
Możesz użyć następującego polecenia:
:%s/^V^M//g
gdzie „^” oznacza CTRLklawisz use .
źródło
polecenie poniżej służy do sformatowania wszystkich plików .sh w bieżącym katalogu, przetestowałem je na moim systemie operacyjnym Fedora.
źródło
W vimie wpisz:
Spowoduje to przesłanie zawartości bieżącego bufora do polecenia dos2unix i zapisanie wyników nad bieżącą zawartością. Vim poprosi o ponowne załadowanie pliku po
źródło
Aby uruchomić bezpośrednio w konsoli Linux:
vim file.txt +"set ff=unix" +wq
źródło
Zwykle
dos2unix
możesz użyć do tego polecenia, po prostu przeczytaj instrukcję, ponieważ wersje GNU i BSD różnią się tym, jak radzą sobie z argumentami.Wersja BSD:
Wersja GNU:
Możesz też utworzyć własną
dos2unix
z dowolną z proponowanych odpowiedzi tutaj, na przykład:źródło
Wiedziałem, że gdzieś to widziałem. Oto wskazówka dotycząca logowania do FreeBSD:
Chcesz usunąć wszystkie te ^ M znaków z pliku DOS? Próbować
źródło
Chociaż ten temat jest bardzo stary, chciałbym umieścić inne rzeczy z Wikipedii:
wypełniając znajdź wszystkie znaki powrotu karetki (jedno i więcej powtórzeń) do końca linii i usuń, więc
\n
pozostaniesz na eol.źródło
To jest mój sposób. Otworzyłem plik w dos EOL i kiedy zapisuję plik, który automatycznie przekonwertuje na EOL unix
źródło
jeśli utworzysz plik w NotePad lub NotePad ++ w systemie Windows i przeniesiesz go do Linuksa i otworzysz przez vima, zobaczysz ^ M na końcu każdej linii. Aby to usunąć,
W terminalu Linux wpisz
To zrobi wymaganą magię.
źródło
Chciałem nowego wiersza zamiast ^ M. Perl na ratunek:
Lub napisać na standardowe wyjście:
źródło