Удалить возврат каретки в Unix - PullRequest
200 голосов
/ 29 апреля 2009

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

Ответы [ 17 ]

1 голос
/ 29 июня 2017

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

#!/bin/bash

inOutFile="$1"
backupFile="${inOutFile}~"
mv --verbose "$inOutFile" "$backupFile"
sed -e 's/\015$//g' <"$backupFile" >"$inOutFile"
1 голос
/ 28 ноября 2012

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

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 в командной строке так же, как в других примерах.

1 голос
/ 20 июля 2010

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

файл fromdos

1 голос
/ 18 августа 2017

Если вы работаете в среде X и у вас есть соответствующий редактор (код Visual Studio), тогда я буду следовать рекомендации:

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

Просто перейдите в правый нижний угол экрана, код Visual Studio покажет вам как кодировку файла, так и соглашение об окончании строки, за которым следует файл, просто одним щелчком мыши вы можете переключить его.

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

0 голосов
/ 10 марта 2016

Я использовал 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)
0 голосов
/ 18 февраля 2019

Хотя это более старый пост, недавно я столкнулся с той же проблемой. Поскольку у меня были все файлы для переименования внутри / tmp / blah_dir /, так как каждый файл в этом каталоге имел завершающий символ "/ r" (с символом "?" В конце файла), так что делать это способом сценария было только о чем я мог думать.

Я хотел сохранить конечный файл с тем же именем (без конечного символа). С sed проблема была в имени выходного файла, которое мне было необходимо, чтобы упомянуть что-то еще (чего я не хотел).

Я пробовал другие варианты, как предложено здесь (не рассматривал dos2unix из-за некоторых ограничений), но не работал.

Я попытался, наконец, с "awk", который работал там, где я использовал "\ r" в качестве разделителя, и взял первую часть :

Хитрость:

echo ${filename}|awk -F"\r" '{print $1}'

Ниже фрагмента скрипта, который я использовал (где у меня был весь файл, в качестве завершающего символа в пути / tmp / blah_dir /) использовался "\ r":

cd /tmp/blah_dir/
for i in `ls`
  do
    mv   $i     $(echo $i | awk -F"\r" '{print $1}')
done

Примечание: Этот пример не очень точен, хотя и близок к тому, что я работал (упомяну здесь только для лучшего понимания того, что я сделал)

0 голосов
/ 21 апреля 2015

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

$ echo $(cat input) > output
...