Удалить возврат каретки в Unix

каков самый простой способ удалить все возвраты каретки r из файла в Unix?

16 ответов


Я собираюсь предположить, что вы имеете в виду возврат каретки (CR, "\r", 0x0d) в заканчивается строк, а не просто слепо в файле (вы можете иметь их в середине строк, насколько я знаю). Использование этого тестового файла с CR только в конце первой строки:

$ 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 - это путь, если он установлен на вашей системе:

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

если по какой-то причине dos2unix не доступен для вас, то sed сделаю это:

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

если по какой-то причине sed не доступен для вас, то ed сделает это, сложным образом:

$ 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

если у вас нет любой из этих инструментов, установленных на вашем поле, у вас есть большие проблемы, чем пытаться конвертировать файлы : -)


tr -d '\r' < infile > outfile

посмотреть tr (1)


Старая Школа:

tr -d '\r' < filewithcarriagereturns > filewithoutcarriagereturns

есть утилита под названием dos2unix то существует на много систем, и может легко быть установлено на большинств.


самый простой способ в Linux-imho

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

на сильный кавычки вокруг оператора замены 's/\r//' are важно. Без них оболочка будет интерпретировать \r как escape+r и уменьшите его до простого r, и удалить все нижние регистры r. Вот почему ответ, данный выше в 2009 году Роб не работает.

и добавить /g модификатор гарантирует, что даже несколько \r будет снято, и не только первое.


sed -i s/\r// <filename> или somesuch; см. man sed или богатство информации, доступной в интернете по поводу использования sed.

одна вещь, котор нужно указать вне точное значение " возвращения экипажа "в вышеуказанном; если вы поистине значите одиночный характер управления" возвращение экипажа", то картина Выше правильна. Если вы имели в виду, в более общем плане, CRLF (возврат каретки и линейный канал, который, как линейные каналы реализованы под Windows), то вы, вероятно, хотите заменить . Каналы голой линии (newline) в Linux/Unix являются \n.


Если вы являетесь пользователем Vi, вы можете открыть файл и удалить возврат каретки с помощью:

:%s/\r//g

или

:1,$ s/^M//

обратите внимание, что вы должны ввести ^M, нажав ctrl-v, а затем ctrl-m.


еще раз решение... Потому что всегда есть еще один:

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

это хорошо, потому что он на месте и работает в каждом вкусе unix/linux, с которым я работал.


кто-то еще порекомендовал dos2unix и я настоятельно рекомендую его также. Я просто предоставляю больше деталей.

если установлен, перейдите к следующему шагу. Если он еще не установлен, я бы рекомендовал установить его через yum как:

yum install dos2unix

затем вы можете использовать его как:

dos2unix fileIWantToRemoveWindowsReturnsFrom.txt

вот в чем дело,

%0d является символом возврата каретки. Чтобы сделать его compatabile с Unix. Нам нужно использовать следующую команду.

dos2unix fileName.extension fileName.extension


попробуйте преобразовать файл dos в файл unix:

fromdos файл


если вы используете ОС (например, OS X), у которой нет dos2unix команда, но имеет интерпретатор Python (версия 2.5+), эта команда эквивалентна :

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

это обрабатывает как именованные файлы в командной строке, так и каналы и перенаправления, как dos2unix. Если вы добавите эту строку в свой~/.файл bashrc (или эквивалентный файл профиля для других оболочек):

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

... при следующем входе в систему (или run source ~/.bashrc в текущем session) вы сможете использовать dos2unix имя в командной строке таким же образом, как и в других примерах.


для UNIX... Я заметил, что dos2unix удалил заголовки Unicode из моего файла UTF-8. В Git bash (Windows) следующий сценарий, похоже, работает хорошо. Он использует СЭД. Обратите внимание, что он удаляет только возврат каретки в конце строк и сохраняет заголовки Unicode.

#!/bin/bash

inOutFile=""
backupFile="${inOutFile}~"
mv --verbose "$inOutFile" "$backupFile"
sed -e 's/5$//g' <"$backupFile" >"$inOutFile"

Если вы используете среду X и имеете правильный редактор (код visual studio), то я бы следовал рекомендации:

код Visual Studio: как показать окончание строки

просто перейдите в нижний правый угол экрана, visual studio code покажет вам как кодировку файла, так и соглашение о конце строки, за которым следует файл, и просто одним щелчком мыши вы можете переключить его.

просто используйте визуальный код в качестве замена для notepad++ в среде linux, и вы готовы идти.


вы можете просто сделать это :

$ echo $(cat input) > output

я использовал Python для этого, вот мой код;

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)