2016-04-07 4 views
1

Во-первых, заблаговременно за помощь.Сценарий оболочки Unix для удаления новых строк, предшествующих определенным символам

Мне нужно заменить новые строки (\ n) пробелом в файлах unix, если им не предшествует ';'.

Например, если у вас есть в файле что-то Unix, как:

TestFields;TestFields2 
;TestFields3;TestFields4 

Вывод должен быть:

TestFields;TestFields2 ;TestFields3;TestFields4 

Так я использую патч в команду вроде этого:

sed ':a;N;$!ba;s/[^;]\n/ /g' 

Проблема в том, что эта команда заменит также символ, который находится до \ n, так что мой outpu выглядит так:

TestFields;TestFields ;TestFields3;TestFields4 

я потерять «2» в «» TestFields2 .. Кто-то есть идея о том, как сохранить свой характер, но заменить \ п?

+0

'sed ': a; N; $! Ba; s/\ ([^;] \) \ n/\ 1/g'' – ghoti

ответ

0

захвата согласованный символ и использование в замене

$ sed -r ':a;N;$!ba;s/([^;])\n/\1 /g' file 
TestFields;TestFields2 ;TestFields3;TestFields4 

г суффикс, вероятно, не требуется.

+0

Не нужно использовать ERE, когда вы можете сделать этот переносной. – ghoti

+0

Спасибо! он работает, (ответит, когда он будет включен) –

0

Это может работать для вас (GNU СЭД):

sed ':a;N;/;\n/!s/\n/ /;ta;P;D' file 

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

Смежные вопросы