Страницы

Поиск по вопросам

вторник, 17 марта 2020 г.

Как склеить строки ?

#perl #shell #sed #linux


Вопрос в заголовке.
Только не все строки. Про tr -d '\n' мне известно.
Пример:
abc
;
fgh
;
"
qwe
rty
"
;
"
asd
"
;
end

В конвейере нужно превратить в:
abc;fgh;"qwe
rty";"asd";end\r

Другими словами, сделать нормальный CSV из вывода, где поля в отдельных строках,
разделитель полей ';' тоже в отдельной строке и поля, которые могут содержать \n, обрамлены
строками '"'. Последний \n надо заменить на \r\n
Для программы (на Си?) я бы  сформулировал задачу просто:
убрать все \n вне "...", а внутри "..." убрать первый сразу за '"'. (на Си писать
не надо, если "однострочник" не получится, то на нем сам как-нибудь напишу).
...
Пока замер на проблеме, что я никак не могу заставить работать что-нибудь типа 
s/\n;\n/;/

ни в sed, ни в perl (т.е. работать с выражением для 2-х строк)
P.S.
python 2.4 тоже подойдет.    


Ответы

Ответ 1



perl -0777 -lpe 'BEGIN{$\="\r\n"}s#\n;\n#;#gsm;s#;"\n#;"#gsm'

Комментариев нет:

Отправить комментарий