2016-02-09 39 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 
}