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?
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: -)
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)
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
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.
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//'
są 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.
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
.
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.
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.
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
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
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
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.
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"
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.
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
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)
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