2016-02-09 37 views
0

我可以插入文本函数名&开盘刚过文本操作/ sed的

如括号:使用

void func() 
{ 
Some text needs to be inserted before me 
} 

O/P

void func() 
{ 
Hello here I am... 
Some text needs to be inserted before me 
} 

的awk/sed的?

回答

0

这可能为你工作(GNU SED):

sed '/^void func()/!b;n;a\Hello here I am...' file 

这捞出,如果它不会对func名称相匹配。匹配后打印该行,读取下一行并将所需的字符串追加到将在{后面打印的字符串中。

同样可以通过以下方式实现:

sed -e '/^void func()/{n;a\Hello here I am...' -e '}' file 
+0

感谢波东...这是工作,但到底是什么!“B”和“{N”是指 –

+0

,你可以解释如何在第二个解决方案工作 –

+0

@Soumyadutta:命令'/.../ !b'表示不匹配中断,因为没有提供标签,默认值将退出当前行的任何后续命令,因此读取下一行并从sed命令的开始处开始。 '{...}'结构只是将包含在地址匹配中的命令分组,即'/^void func()/'。由于append命令需要一个换行符来终止它,所以关闭'}'需要在一个单独的'-e'命令中。 – potong

0

sed的是个人行简单的取代,任何事情你应该用AWK更有趣。例如,使用GNU AWK多字符RS,注意脚本是如何工作的,无论这些常见的功能定义布局的可能性:

$ cat file             
void func() 
{ 
Some text needs to be inserted before me 
} 

void 
func() 
{ 
Some text needs to be inserted before me 
} 

void func() { 
Some text needs to be inserted before me 
} 

$ awk -v RS='^$' -v ORS= '{gsub(/void\s+func\(\)\s*{/,"&\nHello here I am...")}1' file 
void func() 
{ 
Hello here I am... 
Some text needs to be inserted before me 
} 

void 
func() 
{ 
Hello here I am... 
Some text needs to be inserted before me 
} 

void func() { 
Hello here I am... 
Some text needs to be inserted before me 
}