Как удалить специальный символ ^ M в режиме VI - Не удаляется с помощью dos2unix, не может напечатать всю строку, используя cat или grep - PullRequest
0 голосов
/ 21 февраля 2019

Linux : RHEL5 Tikanga Версия : 2.6.18-402.el5 (per uname -a)

Я создаю файл, отображая строкуиз исходного файла Windows (который содержит некоторое значение Version=x.x.x) и помещает его в новый файл aa.txt.Это прекрасно работает для поиска и поиска части.

Делать что-то вроде echo -n "AA "; echo "$(grep "Version=[1-9]" /some/mounted/loc/windows/sourcefile.txt) -" >> aa.txt.

  • Я должен использовать echo -n для AA отдельно, т. Е. Я не могу объединиться echo AA с echo version part с последней командой эха.

Такрезультирующий файл aa.txt визуально выглядит следующим образом: enter image description here Теперь, если я cat это, он не печатает первую строку, только последний - символ.

Если я использую dos2unix (который фактически работает для удаления только символа окончания строки и преобразует файл формата Windows в файл формата символа окончания строки Linux), он все равно не работает, так как ^M в первой строке не являетсяпоследний символ в строке. PS : Если вы заметили, цвет первой ^M отличается от цвета второй строки, которую я добавил вручную, набрав.

Запуск od -cab aa.txt (восьмеричный дамп) для этого файла показывает, что:

  1. для первых ^M, символы \r, cr spи 015 040 (то есть возврат каретки и невидимый пробел).

  2. для второй строки, ^M, показывает мне нормальные значения как ^ M, ^ M и 136 115 (как я вручную набрал ^ и Mво второй строке это ожидалось).

Вопрос: 1. Используя tr -d '\r' < aa.txt > new.aa.txt, я могу решить эту проблему, но какой шаблон я могу использовать в vi или vim для удаления этого символа в командном режиме.Попробовал :%s/^M//g, но шаблон не уловил.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Тип

:% s / \ r / \ r / g

Это говорит:

:%s Найти и заменить (заменить) во всем файле (%)
\r найти символы новой строки
\r и заменить их символами новой строки (или заменить его ничем, не указав во втором \ r)
g несколько разв тех же строках

Я знаю, это звучит глупо, но в части поиска vim включает новые строки Windows в \r, а в разделе замены vim использует новые строки unix.

Альтернативы, который может работать для вас, если вышеперечисленное не работает:

  • Введите следующие клавиши (в обычном режиме) в точности так, как вы их видите
    : * *% тысяча двадцать-девять * 1 031 * S * ** 1 032 * 1033 / * +1034 ** 1 035 * Ctrl * + * тысяча тридцать-шесть v Ctrl + 1042 * м* / / г Введите
  • :e ++ff=dos + :set ff=unix

Если вы работаете на компьютере Windows , может работать следующее:

  • : % S / * * Ctrl одна тысяча семьдесят-одна * 1 072 * + д Ctrl + * * тысяча семьдесят-семь м * +1078 ** * тысяча семьдесят-девять / / г Введите
0 голосов
/ 21 февраля 2019

Вы предположительно использовали реальную карету, за которой следует буква М?Символ на самом деле представляет собой Ctrl-M, который вы можете получить с помощью Ctrl-V, за которым следует Ctrl-M.

...