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)
есть утилита под названием 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
если вы используете ОС (например, 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, и вы готовы пойти.
я использовал 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