Удалить возврат каретки в 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
если у вас нет любой из этих инструментов, установленных на вашем поле, у вас есть большие проблемы, чем пытаться конвертировать файлы : -)
есть утилита под названием 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
если вы используете ОС (например, 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, и вы готовы идти.
я использовал 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)