скрипт оболочки unix для удаления пустых строк после открывающих скобок - PullRequest
2 голосов
/ 21 января 2010

Мне нужен скрипт оболочки (sed, awk) или, что еще лучше, команда vim для удаления любых пустых строк, следующих за строкой с одной открывающей фигурной скобкой:

void func()
{


    foo();
}

void bar()
{

    helloWorld();
}

должно стать:

void func()
{
    foo();
}

void bar()
{
    helloWorld();
}

Есть мысли?

Ответы [ 4 ]

3 голосов
/ 21 января 2010

Vim:

:%s/^{\(\n\s*\)*/{\r    /g
3 голосов
/ 21 января 2010

попробуйте

$ awk 'NF{f=0}/^ *{/{ f=1 } f==1 && !NF{next}1' file
void func()
{
    foo();



}

немного объяснений:

  1. / ^ * {/ означает поиск 0 или более пробелов перед первым {
  2. затем установите флаг в значение true (f = 1)
  3. когда читается следующая строка и f имеет значение true и! NF (означает отсутствие полей, т.е. пустых строк), пропустите строку, используя «next»
  4. Когда следующая строка, которая не является пустой строкой (то есть NF {f = 0} означает переключение флага назад), остальные строки не будут затронуты до следующей открывающей скобки
0 голосов
/ 21 января 2010

Ради интереса, я хотел выяснить это с помощью глобальной команды vim:

:g /{/ s/\n\+/\r/

что чертовски мало. Надеюсь это работает! : -)

0 голосов
/ 21 января 2010

Вероятно, самый простой способ сделать это в Vim - это следующая замена.

:%s/^\s*{\n\zs\_s*\n//
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...