unix shell脚本删除开括号后的空行

时间:2010-01-21 12:10:11

标签: unix vim shell sed awk

我需要一个(sed,awk)shell脚本,或者更好的是,使用一个vim命令来删除带有单个左大括号的行后面的任何空白行:

void func()
{


    foo();
}

void bar()
{

    helloWorld();
}

应该成为:

void func()
{
    foo();
}

void bar()
{
    helloWorld();
}

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

试试这个

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



}

一点解释:

  1. / ^ * {/表示在第一个{
  2. 之前搜索0个或更多空格
  3. 然后将标志设置为true(f = 1)
  4. 当读取下一行并且f为真且!NF(表示没有字段,即空行)时,使用“next”跳过行
  5. 当下一行不是空白行(即NF {f = 0}表示切换回标志。)时,其余行将不会受到影响,直到下一个空心行

答案 1 :(得分:3)

的Vim:

:%s/^{\(\n\s*\)*/{\r    /g

答案 2 :(得分:0)

在Vim中执行此操作的最简单方法可能是以下替换。

:%s/^\s*{\n\zs\_s*\n//

答案 3 :(得分:0)

为了好玩,我想用vim的全局命令来解决这个问题:

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

这很短暂。我希望它有效! : - )