С perl
, который не удаляет разделитель записей по умолчанию - и, таким образом, позволяет легко манипулировать
$ cat -A ip.txt
smith;pete;he is very nice;1990^M$
brown;mark;he is very nice;2010^M$
taylor;sam;he is$
very nice;2009^M$
$ perl -pe 's/(?<!\r)\n/ /' ip.txt
smith;pete;he is very nice;1990
brown;mark;he is very nice;2010
taylor;sam;he is very nice;2009
$ perl -pe 's/(?<!\r)\n/ /' ip.txt | cat -A
smith;pete;he is very nice;1990^M$
brown;mark;he is very nice;2010^M$
taylor;sam;he is very nice;2009^M$
(?<!\r)\n
использует отрицательный просмотр, чтобы гарантировать, что мы заменим \n
только тогда, когда онне предшествует \r
Изменение попытки OP:
$ sed -e ':a' -e 'N' -e '$!ba' -e 's/\([^\r]\)\n/\1 /g' ip.txt
smith;pete;he is very nice;1990
brown;mark;he is very nice;2010
taylor;sam;he is very nice;2009
\([^\r]\)
, чтобы символ, предшествующий \n
, не был \r