Usuń powrót karetki w systemie Unix

Jaki jest najprostszy sposób na usunięcie wszystkich zwrotów karetki \r z pliku w systemie Unix?

Author: devnull, 2009-04-29

16 answers

Zakładam, że masz na myśli powroty (CR, "\r", 0x0d) na kończy się linii, a nie tylko na ślepo w pliku(możesz mieć je w środku łańcuchów z tego co wiem). Użycie tego pliku testowego z CR tylko na końcu pierwszej linii:

$ cat infile
hello
goodbye

$ cat infile | od -c
0000000   h   e   l   l   o  \r  \n   g   o   o   d   b   y   e  \n
0000017

dos2unix jest to sposób, aby przejść, jeśli jest zainstalowany w systemie:

$ cat infile | dos2unix -U | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

Jeśli z jakiegoś powodu dos2unix nie jest dostępny dla ciebie, to sed zrobi to:

$ cat infile | sed 's/\r$//' | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

Jeśli dla niektórych powód sed nie jest dostępny dla ciebie, to ed zrobi to w skomplikowany sposób:

$ echo ',s/\r\n/\n/
> w !cat
> Q' | ed infile 2>/dev/null | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

Jeśli nie masz żadnego z tych narzędzi zainstalowanych na twoim pudełku, masz większe problemy niż próba konwersji plików: -)

 225
Author: paxdiablo,
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-11-23 01:45:43
tr -d '\r' < infile > outfile

Zobacz tr(1)

 199
Author: Henrik Gustafsson,
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
2009-04-29 13:48:10

Old School:

tr -d '\r' < filewithcarriagereturns > filewithoutcarriagereturns
 32
Author: plinth,
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
2009-04-29 13:50:27

Istnieje narzędzie o nazwie dos2unix , które istnieje na wielu systemach i może być łatwo zainstalowane na większości.

 26
Author: Emil H,
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
2009-04-28 22:10:32

Najprostszym sposobem na Linuksa jest imho

    sed -i 's/\r//g' <filename>

Mocne cytaty wokół operatora substytucyjnego 's/\r//'niezbędne. Bez nich powłoka zinterpretuje \r jako escape + r i zredukuje ją do zwykłego r i usuwa wszystkie małe litery r. Dlatego Odpowiedź udzielona w 2009 roku przez Roba nie działa.

I dodanie modyfikatora /g gwarantuje, że nawet Wiele \r zostanie usuniętych, a nie tylko pierwszy.

 16
Author: wfjm,
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-05-23 12:34:39

sed -i s/\r// <filename> lub somesuch; Patrz {[1] } lub bogactwo informacji dostępnych w Internecie dotyczących korzystania z sed.

Jedną z rzeczy, na którą należy zwrócić uwagę, jest dokładne znaczenie "powrotu karetki" w powyższym tekście; jeśli naprawdę masz na myśli pojedynczy znak kontrolny "powrót karetki", to powyższy wzór jest poprawny. Jeśli masz na myśli, bardziej ogólnie, CRLF (powrót karetki i kanał liniowy, czyli jak kanały liniowe są implementowane w systemie Windows), To prawdopodobnie chcesz zamiast tego zastąpić \r\n. Karmy Bare line (newline) w Linuksie / Unix są \n.

 7
Author: Rob,
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
2009-04-28 22:12:37

Jeśli jesteś użytkownikiem Vi, możesz otworzyć plik i usunąć powrót karetki za pomocą:

:%s/\r//g

Lub z

:1,$ s/^M//

Należy wpisać ^m naciskając ctrl-v, a następnie ctrl-M.

 6
Author: Alex Giotis,
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
2012-09-05 11:13:53

Jeszcze raz rozwiązanie... Bo zawsze jest jeszcze jeden:

perl -i -pe 's/\r//' filename

Jest ładny, ponieważ jest na miejscu i działa w każdym smaku unix/linux, z którym pracowałem.

 6
Author: Allan Cano,
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
2016-01-28 16:08:12

Ktoś inny poleca dos2unix i zdecydowanie polecam. Tylko podaję więcej szczegółów.

Po zainstalowaniu przejdź do następnego kroku. Jeśli nie jest już zainstalowany, polecam zainstalować go przez yum Jak:

yum install dos2unix

Wtedy możesz go użyć w następujący sposób:

dos2unix fileIWantToRemoveWindowsReturnsFrom.txt
 3
Author: James Oravec,
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
2015-07-23 15:25:03

Oto rzecz,

%0d jest postacią powrotu powozu. Aby była kompatybilna z Uniksem. Musimy użyć poniższego polecenia.

dos2unix fileName.extension fileName.extension

 2
Author: Sireesh Yarlagadda,
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
2015-12-17 20:18:41

Spróbuj przekonwertować plik dos do pliku unix:

Fromdos file

 1
Author: hawston,
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
2010-07-20 09:50:41

Jeśli używasz systemu operacyjnego (takiego jak OS X), który nie ma polecenia dos2unix, ale ma interpreter Pythona (Wersja 2.5+), to polecenie to jest równoważne poleceniu dos2unix:

python -c "import sys; import fileinput; sys.stdout.writelines(line.replace('\r', '\n') for line in fileinput.input(mode='rU'))"

Obsługuje zarówno nazwane pliki w wierszu poleceń, jak i rury i przekierowania, tak jak dos2unix. Jeśli dodasz tę linię do swojego~/.plik bashrc (lub równoważny plik profilu dla innych powłok):

alias dos2unix="python -c \"import sys; import fileinput; sys.stdout.writelines(line.replace('\r', '\n') for line in fileinput.input(mode='rU'))\""

... przy następnym zalogowaniu (lub uruchomieniu source ~/.bashrc w bieżącej sesji) będziesz mógł korzystać z dos2unix NAZWA w wierszu poleceń w taki sam sposób jak w innych przykładach.

 1
Author: Chris Johnson,
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
2015-04-13 15:27:50

Dla Uniksa... Zauważyłem, że dos2unix usunął nagłówki Unicode z mojego pliku UTF-8. Pod git bash (Windows) następujący skrypt wydaje się działać poprawnie. Używa sed. Uwaga usuwa tylko powroty karetki na końcach linii i zachowuje nagłówki Unicode.

#!/bin/bash

inOutFile="$1"
backupFile="${inOutFile}~"
mv --verbose "$inOutFile" "$backupFile"
sed -e 's/\015$//g' <"$backupFile" >"$inOutFile"
 1
Author: LexieHankins,
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-06-29 20:24:53

Jeśli używasz środowiska X i masz odpowiedni Edytor (visual studio code), to zastosowałbym się do polecenia:

Visual Studio Code: jak pokazywać zakończenia linii

Po prostu przejdź do prawego dolnego rogu ekranu, visual studio code pokaże ci zarówno kodowanie plików, jak i Konwencję końca linii, po której następuje plik.

Wystarczy użyć kodu wizualnego jako zamiennika notepad++ na środowisko linux i jesteś gotowy do pracy.

 1
Author: 99Sono,
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-08-18 09:00:54

Możesz po prostu to zrobić:

$ echo $(cat input) > output
 0
Author: mma7,
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
2015-04-21 12:58:51

Użyłem do tego Pythona, tutaj mój kod;

end1='/home/.../file1.txt'
end2='/home/.../file2.txt'
with open(end1, "rb") as inf:
     with open(end2, "w") as fixed:
        for line in inf:
            line = line.replace("\n", "")
            line = line.replace("\r", "")
            fixed.write(line)
 0
Author: Raphael,
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
2016-03-10 01:15:28