Я придумал это с помощью GNUsed
:
sed -Ee 's/^[,]*(.*)$/\1,/' -e '$s/,$//' file
Или замена в файле:
sed -i -Ee 's/^[,]*(.*)$/\1,/' -e '$s/,$//' file
Начало строки с 0 или более вхождениями,
^[,]*
Захват шаблона оттуда до конца строки:
(.*)$
Замените захваченным шаблоном и добавьте ,
в конце:
\1,
Удалить ,
в последней строке:
-e '$s/,$//'
I simply want to swap the comma and the newline
Делая буквально то же самое с Perl:
perl -0 -pe 's/\n,/,\n/g' file.txt
С помощью sed -с использованием цикла N
... P;D
для поддержки 2-строчного буфера -:
$ sed -e '$!N;s/\n,/,\n/' -e 'P;D' file
blah blah blah,
more blah blah blah,
even more blah blah blah
Конечно, самым быстрым и точным решением является:
tr '\n,' ',\n' < file
Это при условии, что нет других,
(как в вашем образце ).
Если это проблема, используйте (GNU)sed
:
sed -z 's/\n,/,\n/g' file
Если вас беспокоит размер файла, (он не помещается в память, )используйте Perl.