【发布时间】:2016-04-28 07:16:39
【问题描述】:
我可以在函数名和左大括号之后插入文本吗
例如:
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?
【问题讨论】:
我可以在函数名和左大括号之后插入文本吗
例如:
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?
【问题讨论】:
这可能对你有用(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
【讨论】:
/.../!b 表示不匹配中断,因为没有提供标签,默认是退出当前行的任何后续命令,因此请阅读下一行并从sed 命令的开始。 {...} 构造只是将包含在地址匹配中的命令分组,即/^void func()/。由于 append 命令需要一个换行符来终止它,关闭 } 需要在单独的 -e 命令中。
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
}
【讨论】: