Удалите символ ^M из файлов журнала

Самый легкий должен, вероятно, работать xset q или xdpyinfo, перенаправление вывода к /dev/null так, чтобы это не рвало на Вашем дисплее.

Править:

Это выполнит экранную заставку, затем уничтожит ее (измените путь и задержитесь по мере необходимости):

/usr/libexec/mate-screensaver/popsquares & { sleep 0.01 ; kill $! ; }
4
31.08.2013, 00:30
4 ответа

Преобразование автономного файла

Если Вы выполняете следующую команду:

$ dos2unix <file>

<file> будет иметь все символы ^M разделенными. Если Вы хотите уехать <file> неповрежденный, затем просто выполненный dos2unix как это:

$ dos2unix -n <file> <newfile>

Парсинг вывода от команды

Если необходимо сделать их как часть цепочки команд через канал, можно использовать любое количество инструментов такой как tr, sed, awk, или perl сделать это.

TR

$ java -jar test.jar | tr -d '^M' >> test.log

sed

$ java -jar test.jar | sed 's/^M//g' >> test.log

awk

$ java -jar test.jar | awk 'sub(/^M/,"")' >> test.log

жемчуг

$ java -jar test.jar | perl -p -e 's/^M//g' >> test.log

Ввод ^M

При вводе ^M обязательно введите его одним из следующих способов:

  1. Как Управление + v + M и не Сдвиг + 6 + M.
  2. Как обратная косая черта r, т.е. (\r).
  3. Как восьмеричное число (\015).
  4. Как шестнадцатеричное число (\x0D).

Почему это необходимо?

^M часть того, как конец строк завершается на платформе Windows. Каждый конец строки завершается с символом возврата каретки, сопровождаемым символом перевода строки.

В системах Unix конец строки завершается просто символом перевода строки.

  • символ перевода строки = 0x0A в шестнадцатеричном числе, также записанном как \n.
  • символ возврата каретки = 0x0D в шестнадцатеричном числе, также записанном как \r.

Примеры

Вы видите их при передаче по каналу вывода к инструменту такой как od или hexdump. Вот файл примера со строкой, завершающей возвраты каретки + символы перевода строки.

$ cat sample.txt
hi there
bye there

Вы видите их с hexdump как \r + \n:

$ hexdump -c sample.txt 
0000000   h   i       t   h   e   r   e  \r  \n   b   y   e       t   h
0000010   e   r   e  \r  \n                                            
0000015

Или как их шестнадцатеричное 0d + 0a:

$ hexdump -C sample.txt 
00000000  68 69 20 74 68 65 72 65  0d 0a 62 79 65 20 74 68  |hi there..bye th|
00000010  65 72 65 0d 0a                                    |ere..|
00000015

Прокручивание этого sed 's/\r//g':

$ sed 's/\r//g' sample.txt |hexdump -C
00000000  68 69 20 74 68 65 72 65  0a 62 79 65 20 74 68 65  |hi there.bye the|
00000010  72 65 0a                                          |re.|
00000013

Вы видите это sed удалил 0d символ.

Просмотр файлов с ^M без преобразования?

Да можно использовать vim сделать это. Можно или установить fileformat при установке в энергии, которая будет иметь эффект преобразования файла как, мы делали выше, или можно изменить формат файла в vim посмотреть.

изменение формата файла

:set fileformat=dos
:set fileformat=unix

Можно использовать краткую нотацию также:

:set ff=dos
:set ff=unix

Кроме того, можно просто изменить формат файла представления. Этот подход является неразрушающим:

:e ++ff=dos
:e ++ff=unix

Здесь Вы видите, что я открываю наш ^M файл, sample.txt в vim:

           ss of vim dos #1

Теперь я преобразовываю формат файла в представлении:

           ss of vim dos #2

Вот то, на что похоже при преобразовании в unix формат файла:

           ss of vim dos #3

Ссылки

16
27.01.2020, 20:45
  • 1
    Спасибо... Я должен сделать дополнительный шаг после своей команды (Java - банка test.jar>> test.log), действительно ли возможно проигнорировать символ (^M), в то время как перенаправление произвело себя...?? –  Ram 30.08.2013, 09:05
  • 2
    я использовал Java - банка test.jar | sed 's/\r//g'>> test.log---работать отлично –  Ram 30.08.2013, 09:30
  • 3
    @Ram - довольный, что он решил Вашу проблему. –  slm♦ 30.08.2013, 09:41
  • 4
    @sim пользователь пытается видеть, что файл журнала использует vi test.log и кошку-v test.log.. Они рассматривают его как ошибку, таким образом, я пытаюсь скрыть тот символ. пользователь –  Ram 30.08.2013, 09:50
  • 5
    @sim использует только редактор vi. Они не готовы установить любые настройки в редакторе. Они хотят, кодируют себя для обработки его. –  Ram 30.08.2013, 09:58

Пихните файл через dos2unix зафиксировать окончания строки.

Или, используйте один из них:

sed 's,\r$,,'
tr -d '\r'
2
27.01.2020, 20:45
  • 1
    Спасибо... Я использовал Java - банку test.jar | sed 's/\r//g'>> test.log---работающий отлично –  Ram 30.08.2013, 09:32

Необходимо исправить программу для вызова isatty() и если stdout не является tty, то не производите ^M.

1
27.01.2020, 20:45
  • 1
    Это - Ваш ответ? Перечитайте вопрос. В заголовке даже говорится, "удаляют... из файлов журнала". –  slm♦ 30.08.2013, 16:38
  • 2
    @slm, да... они не должны быть в файле журнала во-первых. Правильно написанные программы проверяют, что они на самом деле используют терминал перед выкладыванием терминальных кодов управления. –  psusi 30.08.2013, 16:42
  • 3
    Давайте не обсуждать "правильно написанные" программы. Иногда у людей нет доступа к программному обеспечению, которое они поддерживают и имеют, чтобы сделать вещи как это, чтобы сделать задание. Возможно, вместо этого ответа, Вы могли объяснить, как можно было бы сделать это от Java вместо этого. Походит на разрыв на этом Вопросы и ответы, к которым Вы могли направить свои энергии вместо вхождения, downvoting принятый ответ и высказывание, что это не работает, когда ясно это ДЕЛАЕТ. –  slm♦ 30.08.2013, 16:55
  • 4
    Также в больших средах я работал, я видел точно, что этот тип проблемы подходит. Это было бы слишком дорогостоящим, чтобы возвратиться и "исправить" программу, которая делает это, скорее это имеет более эффект стоимости, чтобы сделать что-то вроде этого. Я поставил деньги, что это программное обеспечение было разработано на ПК и теперь развертывается на поле Unix, и исходные разработчики были бы теми, которые не понимают тестирование типа stdout и затем корректировки соответственно. –  slm♦ 30.08.2013, 16:59
  • 5
    @psusi. В коде Java, как обнаружить или терминал или нет??? –  Ram 03.09.2013, 13:11

Удаление ^ M без специальных знаков:

$ tr -d '\015' <file1 >file2 

$ mv file2 file1
0
27.01.2020, 20:45

Теги

Похожие вопросы