Unix shell 脚本删除左括号后面的空行

标签 unix vim shell sed awk

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

void func()
{


    foo();
}

void bar()
{

    helloWorld();
}

应该变成

void func()
{
    foo();
}

void bar()
{
    helloWorld();
}

有什么想法吗?

最佳答案

试试这个:

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



}

一些解释:

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

关于Unix shell 脚本删除左括号后面的空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2109026/

相关文章:

Bash 脚本 - 询问用户输入文件,如何使制表符完成工作?

c - TCP/IP 客户端发送

linux - 通过另一个列 shell 输出一个列组

regex - Vim 函数通过正则表达式从 Git URL 中剥离所有者/存储库

c++ - 如何为vim应用语法文件?

linux - 如何从文件列表中创建不存在的文件列表

c - 如何让我的程序在调用 exec 后返回到原来的循环?

c - 是否可以覆盖/绕过 nscd?

shell - Unix 用户创建的变量

Vim:将单词括在标签中