我有以下内容:
void function_1()
{
//something (taking only 1 line)
}
->INSERT LINE HERE<-
//more code
使用sed,我想在INSERT LINE HERE标签处插入行。 最简单的方法应该是:
但是没有一种已知的sed选项可以胜任这项工作。
sed '/function_1/,3a new_text
在&#39; function_1&#39;
之后插入new_textsed '/function_1/,+3a new_text
在接下来的3行之后插入new_text,&#39; function_1&#39;
sed '/function_1/N;N;N; a new_text
在多个地方插入new_text,与模式无关
感谢。
答案 0 :(得分:7)
试试这个:
sed "/function_1/{N;N;N;a new_text
}" filename
答案 1 :(得分:2)
sed '/function_1(/,/^[[:space:]]*}/ {
,/^[[:space:]]*}/ a\
Line that\
you want to\
insert (append) here
}' YourFile
}
function_1(
之后的行(单独在最后一行空格的行中)
}
,例如您的样本基于函数名称选择是可靠的,因为它可以在其他代码段中作为函数本身的调用使用(并且通常是它),所以可能/^void function_1()$/
更好
答案 2 :(得分:1)
使用awk:
awk '1;/function_1/{c=4}c&&!--c{print "new text"}' file
1
是{print}
的简写,因此文件中的所有行都会打印c
设置为4 c
达到1(因此c
为真且!--c
为真)时,插入行您可以使用!--c
,但将c
的检查添加为true也表示c
不会继续减少超过0。
答案 3 :(得分:0)
不要数,匹配:
sed -e '/^void function_1()/,/^}$/ { /^}$/a\
TEXT TO INSERT
}' input
这将查看声明和右大括号之间的块,然后在右大括号后附加TEXT_TO_INSERT。