Unix - необходимо удалить разрыв строки из записи, охватывающей несколько строк

Очевидно, у вас могут быть проблемы с безопасностью и ошибки, потому что каждая новая версия содержит, помимо новых функций, исправленные ошибки и проблемы безопасности

-1
11.04.2018, 21:05
2 ответа
awk '{ printf "%s",$0 }; /"$/ { print ""; };' inputfile

В выходных данных должна быть новая строка, только если входная строка заканчивается двойными кавычками. Таким образом, этот код awkвыводит все входные строки без новой строки. После этого он проверяет, заканчивается ли строка ввода на ", и если да, то выводится новая строка.

0
28.01.2020, 05:12
$ sed -n -e '/^"/{h;n;}' -e H -e '/"$/{g;s/\n//g;p;}' file
"IN001~24Apr16~Hi,what a way?oh no!~not here~"
"IN003~29Apr16~what a way?~oh no!say again.not again~"

Команда sedбудет...

  • /^"/{h;n;}:скопировать все строки, начинающиеся с ", в область хранения (h), перезаписав все, что там было, и сразу же перейти к следующей строке ввода(n).

  • H:Другие строки добавляются к пространству удержания.

  • /"$/{g;s/\n//g;p;}:Если строка заканчивается на ", будет выбрано место хранения(g)и из него удалены новые строки (, они добавляются при добавлении строк к пространству хранения ), и результирующая строка печатается.

Командная строка может быть немного сжата:

$ sed -n '/^"/{h;n;};H;/"$/{g;s/\n//g;p;}' file
0
28.01.2020, 05:12

Теги

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