Сценарий оболочки Unix для удаления новых строк, которым предшествуют определенные символы

Во-первых, заранее спасибо за вашу помощь.

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

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

TestFields;TestFields2
;TestFields3;TestFields4

Результат должен быть:

TestFields;TestFields2 ;TestFields3;TestFields4

Итак, я использую такую ​​команду sed:

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

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

TestFields;TestFields ;TestFields3;TestFields4

Я теряю «2» в поле «TestFields2». Кто-то знает, как сохранить моего персонажа, но заменить \ n?


person Morgan Senechal    schedule 07.04.2016    source источник


Ответы (2)


захватите совпадающий символ и используйте его вместо

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

суффикс g, вероятно, не нужен.

person karakfa    schedule 07.04.2016
comment
Нет необходимости использовать ERE, если вы можете сделать это портативным. - person ghoti; 07.04.2016
comment
Спасибо ! он работает, (поставлю свой ответ, когда он будет включен) - person Morgan Senechal; 07.04.2016

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

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

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

person potong    schedule 07.04.2016