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



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

617   16  

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>

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

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

sed -i s/\r// <filename> или что-то вроде; см. 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 file

если вы используете ОС (например, 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'))\""

... при следующем входе в систему (или запуске source ~/.bashrc в текущем сессия) вы сможете использовать 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)

Comments

    Ничего не найдено.