echo '"Field1a"|"Field2a"|"Field3a"|"ufghjkrtyrtyfgh$"
"Field1b"|"Field2b
continue on line 2
continue on line 3"|"Field3b"|"ufghjkrtyrtyfgh$"
"Field1c"|"Field2c"|"Field3c"|"ufghjkrtyrtyfgh$"' | sed -nr '/^".*"$/{p;n};:a;/[^"]$|^[^"]/{N;s/(.)\n(.)/\1\2/;ta};p'
"Field1a"|"Field2a"|"Field3a"|"ufghjkrtyrtyfgh$"
"Field1b"|"Field2bcontinue on line 2continue on line 3"|"Field3b"|"ufghjkrtyrtyfgh$"
"Field1c"|"Field2c"|"Field3c"|"ufghjkrtyrtyfgh$"
Успешное решение. Будет напечатана каждая строка, начинающаяся и оканчивающаяся на «, затем команда« n »прочитает следующую строку и начнет новый цикл. Если строка не начинается и не заканчивается на «, она идет в цикл»:a .... ta ', затем команда «N» добавляет следующую строку, команда «s» заменяет «lastchar» «newline» «firstchar »(Часть« (.)\ N (.) »С« lastchar »« firstchar », затем команда« ta »переходит на метку«:a », только если команда« s »действительно заменяет что-то (это цикл) ). Если 's' ничего не заменяет, 'ta' не переходит к метке, а sed 'p' печатает результирующую строку и начинает новый цикл со следующей строки.
Решение awk действительно кажется чище. Я думаю, что мое решение sed может быть улучшено.
Edit:-n опция подавляет автоматический вывод sed, поэтому мы печатаем только то, что нам нужно, с помощью p.
Опция -r предназначена для расширенных регулярных выражений.