Unix shell脚本,用于删除左括号后的空行
我需要一个(sed,awk)shell脚本,或者更好的是,需要一个Vim命令来删除一行后面的任何空白行,该行带有一个开放的花括号。比如说,Unix shell脚本,用于删除左括号后的空行,unix,vim,shell,sed,awk,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 &a
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();
}
一点解释:
/^*{
表示在第一个{
之前搜索0个或更多空格f=1
)f
为真且!NF
(表示没有字段,即该行为空)时,使用next
跳过行NF{f=0}
意味着切换回标志),则在下一个大括号打开之前,其余行不会受到影响在Vim中实现这一点的最简单方法可能是 替代:
:%s/^\s*{\n\zs\_s*\n//
为了好玩,我想使用vim的全局命令来解决这个问题:
:g /{/ s/\n\+/\r/
这是相当短的。我希望它能工作。-(<)/P>@ Goodo77:在打开括号之后删除空白行,但也可以删除所有其他空行……很好,谢谢。我仍然在想,看看GAWK手册,它是如何工作的……安德烈亚斯:我想你不会发现最后一个“1”。在手册页或信息文件中。将在第一个{之前添加一个^。可能可以改进以处理一行中的一个{,但前面有空格/空格。类似于这样,我认为:
:%s/^\(\s*{\)[\s\n]*/\1\r/
您不想要:%s/^\(\s*{\)\%(\s*\n\)*/\1\r/
这样就不会消除{
?@kejadlen:答案中的命令并没有消除大括号前面的空格,因为模式中的\zs
说明符将匹配的开始设置为大括号后面的换行符之后的替换,从而使所有匹配的字符保持在该点之前(请参见:help/\zs
)。
:g /{/ s/\n\+/\r/