Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Удалить терминаторы линии CR

Автор вопроса: Hongxu ChenОтветов: 3

Во-первых, я бы сказал, что прочитал this post, однако у меня все еще есть проблемы с CR line terminators.

Есть файл с именем build_test.sh, который я редактировал в leafpad, и он может отображаться прямо в Vim:

cp ~/moonbox/llvm-2.9/lib/Transforms/MY_TOOL/$1 test.cpp
cd ~/moonbox/llvm-obj/tools/TEST_TOOL/
make
make install
cd -

Тем не мение:

  1. Используя cat build_test.sh, он не выводит ничего.
  2. Используя more build_test.sh, он выводит: cd - install/llvm-obj/tools/TEST_TOOL/Y_TOOL/$1 test.cpp
  3. Используя less build_test.sh, он выводит: cp ~/moonbox/llvm-2.9/lib/Transforms/MY_TOOL/$1 test.cpp^Mcd ~/moonbox/llvm-obj/tools/TEST_TOOL/^Mmake^Mmake install^Mcd -

Результат file build_test.sh:

build_test.sh: ASCII text, with CR line terminators

После этот пост, ^M больше не существует, однако разрыва строки больше нет :-(
Результат file build_test_no_cr.sh теперь:

build_test_nocr.sh: ASCII text, with no line terminators

Решение можно увидеть здесь.

Однако мне все еще хотелось бы, почему cat ничего не отображает, а more показывает такой странный результат. Кроме того, почему dos2unix и set fileformat=unix в Vim не работают в этом случае.

ps: я предполагаю, что, возможно, мой редактор (Vim или leafpad?) генерирует только \r, а не \n для новой строки. Как же так?

shellnewlineunixdos

Ответы

Ответ 1 · рейтинг 11 · fge

Простые \r терминаторы для новых строк - это терминаторы строк "старого Mac", странно, что редактор 2012+ даже генерирует файлы с такими символами конца строки ... В любом случае, вы можете использовать команду mac2unix, которая является частью дистрибутива dos2unix:

# Edits thefile inline
mac2unix thefile
# Takes origfile as an input, outputs to dstfile
mac2unix -n origfile dstfile

Эта команда не изменяет файлы, в которых уже есть символы конца строки, что является бонусом. И обратное (unix2mac) тоже существует.

Обратите внимание, что mac2unix совпадает с dos2unix -c mac.

Ответ 2 · рейтинг 8 · jpmuc

Кроме того, если вы работаете с vim, вы можете принудительно использовать окончания строк UNIX, выполнив

:set fileformat=unix
:w

или просто добавь

set fileformat=unix

в ваш .vimrc файл

Ответ 3 · рейтинг 6 · Hongxu Chen

Я наконец понял, что могу использовать эту команду:

tr '^M' '\n' <build_test.sh >build_test_nocr.sh

где ^M добавляется нажатием клавиш Ctrl+v и Enter. Альтернативно, это имеет тот же эффект:

tr '\r' '\n' <build_test.sh >build_test_nocr.sh

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы