Konwertuj zakończenia linii DOS na zakończenia linii Linuksa w Vimie

Jeśli otwieram pliki utworzone w systemie Windows, wszystkie linie kończą się ^M. Jak usunąć wszystkie te znaki na raz?

Author: Peter Mortensen, 2008-09-17

27 answers

Dos2unix jest narzędziem wiersza poleceń, które to zrobi, lub :%s/^M//g zrobi to, jeśli użyjesz Ctrl-v Ctrl-m aby wprowadzić ^m, albo możesz {[1] } i Vim zrobi to za Ciebie.

Jest dokumentacja na fileformat Ustawienie, a vim wiki ma obszerną stronę on line ending conversions .

Na przemian, jeśli przenosisz pliki tam iz powrotem często, możesz nie chcieć ich konwertować, ale raczej zrobić :set ff=dos, więc Vim będzie wiedział, że jest to plik DOS i używa konwencji DOS Dla zakończeń linii.

 1114
Author: pjz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-25 14:59:25

Zmień zakończenia linii w widoku:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

Może to być również użyte jako operacja zapisu (tylko:w nie zapisze 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 poleceń:

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done
 287
Author: Ludvig A. Norin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-25 10:46:59

Zazwyczaj używam

:%s/\r/\r/g

Co wydaje się trochę dziwne, ale działa ze względu na sposób, w jaki vim dopasowuje linefeeds. Mi też łatwiej zapamiętać :)

 164
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 13:58:36

Wolę użyć następującego polecenia:

:set fileformat=unix

Możesz również użyć mac lub dos, aby odpowiednio przekonwertować plik na konwencję plików Mac lub MS-DOS/Windows. I nic nie robi, jeśli plik jest już w odpowiednim formacie.

Aby uzyskać więcej informacji, zobacz Pomoc Vim:

:help fileformat
 104
Author: Sylvain Defresne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 13:55:40
:%s/\r\+//g

W Vimie, który usuwa wszystkie powroty karetki i pozostawia tylko nowe linie.

 20
Author: mercutio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-21 16:05:51

:set fileformat=unix Aby przekonwertować z DOS-a na Unix-a.

 19
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 13:57:01

From: Format Pliku

[Esc]: %s / \r$ / /

 13
Author: Alex Gartrell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 13:51:35

Konwertuj katalog plików z DOS-a na Unix

Używając wiersza poleceń i sed, Znajdź wszystkie pliki w bieżącym katalogu z rozszerzeniem".ext "i usuń wszystkie" ^M "

@ https://gist.github.com/sparkida/7773170

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

Również, jak wspomniano w poprzedniej odpowiedzi, ^m = Ctrl + V + Ctrl + M (nie wpisuj tylko symbolu " ^ " I M).

 9
Author: Sparkida,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 14:09:03

dos2unix może bezpośrednio modyfikować zawartość pliku.

Możesz użyć go bezpośrednio na pliku, bez potrzeby tymczasowego przekierowywania plików.

dos2unix input.txt input.txt

Powyższe używa założonej klawiatury amerykańskiej. Użyj opcji -437, aby użyć klawiatury UK.

dos2unix -437 input.txt input.txt
 8
Author: Venkataramesh Kommoju,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 14:02:17

Następujące kroki mogą przekonwertować format pliku Dla 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: format pliku

 7
Author: ajitomatix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 14:03:47
tr -d '\15\32' < winfile.txt > unixfile.txt

(Patrz: konwertuj między plikami tekstowymi Unix i Windows)

 7
Author: MichaelD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 14:05:14

Komentarz o pojawianiu się ^m jest tym, co mi się udało. Samo wpisanie "^m " w moim vi nic nie dało (nie znaleziono). CTRL+V CTRL+M Sekwencja zrobiła to doskonale.

Moja robocza Komenda zastępcza to

:%s/Ctrl-V Ctrl-M/\r/g

A na moim ekranie wyglądało to tak:

:%s/^M/\r/g
 5
Author: Dannid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-19 20:13:10

Z następującym poleceniem:

:%s/^M$//g

Aby wyświetlić ^M, wpisz CtrlV a następnie CtrlM . CtrlV mówi Vimowi, aby wziął następny wprowadzony znak dosłownie.

 5
Author: Dave Webb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 13:50:53

W VIM:

:e ++ff=dos | set ff=unix | w!

W powłoce z VIM:

vim some_file.txt +'e ++ff=dos | set ff=unix | wq!'

e ++ff=dos - Wymuś otwarcie pliku w formacie dos.

set ff=unix - Konwertuj plik do formatu unix.

 5
Author: Victor S.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-03 12:37:03
:g/Ctrl-v Ctrl-m/s///

CtrlM to znak \r, czyli powrót karetki, który dodają zakończenia linii DOS. CtrlV mówi Vimowi, aby wstawił literał CtrlM znak w wierszu poleceń.

Jako całość, to polecenie zastępuje wszystkie \r niczym, usuwając je z końców linii.

 4
Author: Rob Wells,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 13:46:30

Znalazłem bardzo łatwy sposób: otwórz plik za pomocą nano: nano file.txt

Naciśnij Ctrl + O aby zapisać, ale przed naciśnięciem Enter , Naciśnij: Alt+D przełączanie pomiędzy zakończeniami linii DOS i Unix/Linux, lub: Alt+M aby przełączać się między końcami linii Mac i Unix/Linux, a następnie naciśnij Enter , aby zapisać i Ctrl+x to quit.

 4
Author: Stefan Sjöberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 15:54:27

Możesz użyć:

vim somefile.txt +"%s/\r/\r/g" +wq

Lub dos2unix Narzędzie.

 3
Author: Christy Wald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 15:57:19

Aby uruchomić bezpośrednio w konsoli Linuksa:

vim file.txt +"set ff=unix" +wq
 3
Author: CBuzatu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 16:07:07

Możesz użyć następującego polecenia:
:%s/^V^M//g
gdzie " ^ " oznacza użycie klawisza CTRL .

 2
Author: JayG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-27 10:26:55

Poniższe polecenie służy do przeformatowania wszystkich plików .SH w bieżącym katalogu. Testowałem go na moim Fedorze OS.

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
 1
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 14:09:56

In Vim, type:

:w !dos2unix %

Spowoduje przekierowanie zawartości bieżącego bufora do polecenia dos2unix i zapisanie wyników nad bieżącą zawartością. Vim poprosi o ponowne wczytanie pliku po.

 1
Author: Tallak Tveide,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 16:06:09

Chciałem newlines w miejsce ^M ' S. Perl na ratunek:

perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt

Lub napisać na stdout:

perl -p -e 's/\x0d/\n/g' < excel_created.txt
 0
Author: user3379574,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-25 13:18:27

Zazwyczaj istnieje dos2unix polecenie, którego możesz użyć do tego celu. Upewnij się tylko, że przeczytałeś instrukcję, ponieważ wersje GNU i BSD różnią się w tym, jak radzą sobie z argumentami.

Wersja BSD:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

Wersja GNU:

dos2unix $FILENAME

Alternatywnie, możesz utworzyć własne dos2unix z dowolną z proponowanych odpowiedzi tutaj, na przykład:

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "${1}";
}
 0
Author: dsm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 14:00:34

Z Wikii:

%s/\r\+$//g

, który znajdzie wszystkie znaki powrotu karetki (jeden i więcej powtórzeń) aż do końca linii i usunie, więc po prostu \n zostanie na EOL.

 0
Author: loadaverage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 14:12:05

To mój sposób. Otworzyłem plik w DOS EOL i po zapisaniu pliku, który automatycznie przekonwertuje się na Unix EOL:

autocmd BufWrite * :set ff=unix
 0
Author: Thomas PABST,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 15:56:02

Jeśli utworzysz plik w notatniku lub Notepad++ w systemie Windows, przynieś go do Linuksa i otwórz go przez Vim, zobaczysz ^m na końcu każdej linii. Aby to usunąć,

Na twoim terminalu Linux wpisz

dos2unix filename.ext

To wykona wymaganą magię.

 0
Author: Santle Camilus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 16:01:10

Wiedziałem, że gdzieś to widziałem. Oto FreeBSD wskazówka logowania:

Czy trzeba usunąć wszystkie znaki ^m z pliku DOS? Try

tr -d \\r < dosfile > newfile
    -- Originally by Dru <[email protected]>
 0
Author: Albaro Pereyra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-29 16:04:35