Какой самый простой способ удалить все возвраты каретки \r
из файла в Unix?
unix
carriage-return
Aldur
источник
источник
Ответы:
Я буду считать , что вы имеете в виду возврат каретки ( CR,
"\r"
,0x0d
) в концах строк , а не просто слепо в файле (вы можете иметь их в середине строки для всех я знаю). Используя этот тестовый файл только CRв конце первой строки:dos2unix
это путь, если он установлен в вашей системе:Если по какой-то причине вам
dos2unix
это не доступно, тоsed
сделаем это:Если по какой-то причине вам
sed
это недоступно, тоed
сделаем это сложным образом:Если на вашем компьютере не установлено ни одного из этих инструментов, у вас есть большие проблемы, чем при попытке конвертировать файлы :-)
источник
\r
работает только с GNU sed, иначе вы можете сделать это:sed `echo "s/\r//"`
sed
ни вecho
распознавании\r
. В этом случае толькоprintf "\r"
кажется, что работает.sed "s/$(printf '\r')\$//"
$
следующим образом:sed $'s@\r@@g' |od -c
(но если вы замените ее,\n
вам нужно ее избежать)CTRL-V + CTRL-M
вместо\r
похоже, что это могло бы работать.Смотрите tr (1)
источник
tr
команда не поддерживает\r
escape, попробуйте'\015'
или, возможно, литерал'^M'
(во многих оболочках на многих терминалах ctrl-V ctrl-M выдаст буквальный символ ctrl-M).outfile = infile
?someProg <in >out && mv out in
.Старая школа:
источник
Самый простой способ для Linux, по моему скромному мнению,
В сильных кавычках вокруг оператора подстановок
's/\r//'
являются существенными . Без них оболочка будет интерпретироваться\r
как escape + r, уменьшать ее до простогоr
и удалять все строчные буквыr
. Вот почему ответ, данный Робом в 2009 году , не работает.А добавление
/g
модификатора гарантирует, что\r
будет удалено даже многократное число , а не только первое.источник
Существует утилита dos2unix, которая существует во многих системах и может быть легко установлена в большинстве систем.
источник
sed -i s/\r// <filename>
или что-то подобное; увидетьman sed
или множество информации, доступной в Интернете, относительно использованияsed
.Следует отметить одно точное значение слова «возврат каретки» в приведенном выше; если вы действительно имеете в виду один управляющий символ «возврат каретки», то приведенная выше схема верна. Если вы имели в виду, в более общем смысле, CRLF (возврат каретки и перевод строки, то есть, как переводы строк реализованы в Windows), то вы, вероятно, хотите заменить
\r\n
вместо этого. Голые строки (новая строка) в Linux / Unix есть\n
.источник
s/\r//
похоже, что в OS X возврат каретки неr
удаляется, вместо этого он, похоже, удаляет буквенные символы. Я не уверен, почему это еще. Может быть, это как-то связано со способом цитирования строки? Как обходной путь, использованиеCTRL-V + CTRL-M
вместо,\r
кажется, работает.Если вы являетесь пользователем Vi, вы можете открыть файл и удалить возврат каретки с помощью:
или с
Обратите внимание, что вы должны набрать ^ M, нажав Ctrl-V, а затем Ctrl-M.
источник
^M
-s вообще. Обойти это - тонна нажатий клавиш, а это не то, для чего создан vim;). Я бы просто пошелsed -i
, а затем `-e 's / \ r $ // g', чтобы ограничить удаление CRs на EOL.Еще раз решение ... Потому что всегда есть еще один:
Это приятно, потому что он работает и работает в каждом варианте Unix / Linux, с которым я работал.
источник
Кто-то еще рекомендует,
dos2unix
и я настоятельно рекомендую это также. Я просто предоставляю больше деталей.Если установлено, перейдите к следующему шагу. Если он еще не установлен, я бы рекомендовал установить его через
yum
:Тогда вы можете использовать его как:
источник
Если вы используете ОС (например, OS X), у которой нет
dos2unix
команды, но есть интерпретатор Python (версия 2.5+), эта команда эквивалентнаdos2unix
команде:Это обрабатывает как именованные файлы в командной строке, так и каналы и перенаправления, как
dos2unix
. Если вы добавите эту строку в файл ~ / .bashrc (или эквивалентный файл профиля для других оболочек):... при следующем входе в систему (или запуске
source ~/.bashrc
в текущем сеансе) вы сможете использоватьdos2unix
имя в командной строке так же, как и в других примерах.источник
Вот вещь,
%0d
символ возврата каретки Сделать его совместимым с Unix. Нам нужно использовать приведенную ниже команду.dos2unix fileName.extension fileName.extension
источник
Попробуйте это преобразовать файл DOS в файл Unix:
источник
Для UNIX ... Я заметил, что dos2unix удалил заголовки Unicode из моего файла UTF-8. В git bash (Windows) следующий скрипт, похоже, работает хорошо. Он использует sed. Обратите внимание, что он удаляет только возврат каретки на концах строк и сохраняет заголовки Unicode.
источник
Если вы работаете в среде X и имеете соответствующий редактор (код Visual Studio), я бы следовал рекомендациям:
Код Visual Studio: как показать окончания строк
Просто перейдите в правый нижний угол экрана, код Visual Studio покажет вам как кодировку файла, так и соглашение об окончании строки, за которым следует файл, простым щелчком мыши вы можете переключить его.
Просто используйте визуальный код в качестве замены для notepad ++ в среде Linux, и все готово.
источник
Notepad++
команду вEdit / EOL Conversion / Unix (LF)
вашей системе Windows перед копированием файла в вашу систему Linux.Удаление
\r
в любой системе UNIX®:Большинство существующих решений в этом вопросе специфичны для GNU и не будут работать на OS X или BSD; приведенное ниже решение должно работать на многих других системах UNIX, и в любой оболочке, от
tcsh
доsh
, но по- прежнему работать даже на GNU / Linux, тоже.Протестировано на OS X, OpenBSD и NetBSD в
tcsh
и на Debian GNU / Linux вbash
.С
sed
:В
tcsh
на OS X, следующийsed
фрагмент кода может быть использована вместе сprintf
, так как ни ,sed
ниecho
ручки\r
особым способом , как ГНУ делает:С
tr
:Другой вариант
tr
:Разница между
sed
иtr
:Казалось бы, что
tr
сохраняет отсутствие завершающей новой строки из входного файла, тогда какsed
в OS X и NetBSD (но не в OpenBSD или GNU / Linux) вставляет завершающую новую строку в самом конце файла, даже если во входных данных отсутствует какой-либо в конце\r
или\n
в самом конце файла.Тестирование:
Вот несколько примеров тестирования, которые можно использовать, чтобы убедиться, что это работает в вашей системе, используя
printf
иhexdump -C
; в качестве альтернативы,od -c
может также использоваться, если ваша система отсутствуетhexdump
:источник
Я использовал Python для этого, здесь мой код;
источник
Хотя это старый пост, недавно я столкнулся с той же проблемой. Поскольку у меня были все файлы для переименования внутри / tmp / blah_dir /, так как каждый файл в этом каталоге имел символ «/ r» (в конце файла был символ «?»), Так что делать это способом сценария было только для меня.
Я хотел сохранить окончательный файл с тем же именем (без конечного символа). С sed проблема была в имени выходного файла, которое мне было необходимо, чтобы упомянуть что-то еще (чего я не хотел).
Я пробовал другие варианты, как предложено здесь (не считал dos2unix из-за некоторых ограничений), но не работал.
Наконец, я попытался с "awk", который работал, где я использовал "\ r" в качестве разделителя и взял первую часть :
Хитрость заключается в следующем:
Ниже приведен фрагмент сценария, который я использовал (где у меня все файлы имели «\ r» в качестве завершающего символа в пути / tmp / blah_dir /), чтобы исправить мою проблему:
Примечание: этот пример не очень точен, хотя и близок к тому, что я работал (упомяну здесь, чтобы дать лучшее представление о том, что я сделал)
источник
Я сделал этот shell-скрипт для удаления символа \ r. Работает в солярисе и красной шапке:
источник
Вы можете просто сделать это:
источник
a * b
...