Jeśli otworzę pliki utworzone w systemie Windows, wszystkie wiersze kończą się na ^M
.
Jak mogę usunąć te znaki naraz?
Jeśli otworzę pliki utworzone w systemie Windows, wszystkie wiersze kończą się na ^M
.
Jak mogę usunąć te znaki naraz?
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.
:%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 @Bunyk
set ff=unix
nic nie robi. Może konwertuje plik, ale wszystkie ^M
znaki wciąż tam są.
Zmień zakończenia linii w widoku:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Można to również wykorzystać jako operację zapisywania (: sam w nie zapisuje przy użyciu zakończeń linii widocznych na ekranie):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
I możesz go użyć z wiersza polecenia:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
: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
:%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ć :)
: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:
:set fileformat=unix
Możesz także użyć mac
lub dos
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:
:help fileformat
^M
znaki.
set fileformat=unix
Działa dodawanie do mojego pliku .vimrc.
:set fileformat=unix
przekonwertować z dos na unix.
z: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
@ https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
także, jak wspomniano powyżej ^ M = Ctrl+V+ Ctrl+M(nie wpisuj po prostu symbolu karetki „^” i M)
dos2unix
może bezpośrednio modyfikować zawartość pliku.
Możesz użyć go bezpośrednio w pliku, bez potrzeby tymczasowego przekierowania pliku.
dos2unix input.txt input.txt
Powyżej używa założonej klawiatury amerykańskiej. Użyj -
opcji 437, aby korzystać z klawiatury brytyjskiej.
dos2unix -437 input.txt input.txt
tr -d '\15\32' < winfile.txt > unixfile.txt
(patrz: http://kb.iu.edu/data/acux.html )
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.
Odniesienie: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
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
:%s/Ctrl-V Ctrl-M/\r/g
i wyglądało to tak na moim ekranie:
:%s/^M/\r/g
:%s
zamiast :1,$s
. %
jest skrótem od 1,$
.
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ść.
^M
zakończenia. zapisz jako dos, aby zachować, zapisz jako Linux, aby usunąć. można to sprawdzić za pomocącat -v
Możesz użyć:
vim somefile.txt +"%s/\r/\r/g" +wq
lub dos2unix utility
.
W vimie wpisz:
:w !dos2unix %
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 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:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
Wersja GNU:
dos2unix $FILENAME
Możesz też utworzyć własną dos2unix
z dowolną z proponowanych odpowiedzi tutaj, na przykład:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
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ć
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
Chociaż ten temat jest bardzo stary, chciałbym umieścić inne rzeczy z Wikipedii:
%s/\r\+$//g
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.
To jest mój sposób. Otworzyłem plik w dos EOL i kiedy zapisuję plik, który automatycznie przekonwertuje na EOL unix
autocmd BufWrite * :set ff=unix
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
dos2unix nazwa_pliku.ext
To zrobi wymaganą magię.
Chciałem nowego wiersza zamiast ^ M. Perl na ratunek:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
Lub napisać na standardowe wyjście:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
hexdump -C badfile
i zobaczysz,0x0d 0x0a
"\r\n"
że to twój problem.