Как сохранить смешанные форматы перевода строки в gawk?

Я недавно столкнулся с той же проблемой. Необходимо отключить флеш-плагин, который поставлется с Chrome, названным PepperFlash, путем ввода about:plugins в omnibar и нахождение плагина PepperFlash, затем нажимающего Disable. Для замены PepperFlash чем-то, что работает необходимо добавить non-free перейдите к своему repos путем добавления non-free после соответствующей строки (строк) в /etc/apt/sources.list затем выполнение

apt-get update
apt-get install flashplugin-nonfree

который установит собственный флеш-плагин Adobe.


Править

Насколько я знаю, что это не имеет никакого отношения к VirtualBox. Я столкнулся с этой проблемой о собственной системе.

4
09.06.2015, 05:13
2 ответа

Вы можете использовать встроенную переменную RT

RT устанавливается каждый раз при чтении записи. Он содержит входной текст, который соответствует тексту, обозначенному RS, разделителем записей. Эта переменная является расширением gawk.

printf '%s\n' LF CRLF$'\r' | 
  gawk 'BEGIN { RS = "\r\n|\n" }
       { printf($0 RT) }'

Выводится при перенаправлении на sed -nl - который показывает CR как \ r и конец строки как ​​$ - что до sed означает, что следующим символом будет \ n (или конец ввода .

LF$
CRLF\r$

Однако, если вы хотите переключить терминатор с CRLF на LF или наоборот, два действия:

printf '%s\n' was-LF was-CRLF$'\r' | 
  gawk 'BEGIN { RS = "\r\n|\n" }
        RT == "\r\n" { printf($0 "\n") }
        RT == "\n"   { printf($0 "\r\n") }'

Вывод при передаче по конвейеру на sed -nl

was-LF\r$
was-CRLF$

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

  gawk 'BEGIN { RS = "\r\n|\n" }
        { # some processing code here (before the tests)
          if( RT == "\r\n" ) { printf($0 "\n") }
          if( RT == "\n")    { printf($0 "\r\n") } }'
4
27.01.2020, 20:54

Прямое решение - рассматривать только LF как конец строки, вытаскивать финальную CR, если таковая имеется, и распечатывать ее.

{ CR = (sub(/\r$/,"") ? "\r" : "") }
… { … print "stuff" CR }

Вывод всегда будет завершаться LF, даже если последняя входная строка не завершена.

1
27.01.2020, 20:54

Теги

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