我正在尝试编写一个sed命令,允许我修改函数的参数。参数的数量可以是变量。
如果这是我的功能:
int myFunction(int arg1, int arg2, Dog arg3) {
// function implementation
}
我希望能够对int arg1,int arg2,...
执行添加操作以下是我的不起作用:
sed -e '/^[a-zA-Z0-9_]\+\s\+[a-zA-Z0-9_]\+(/ , /)[\n\s]*{/ {
# arguments should be listed here
}'
感谢任何帮助。对我来说很容易,这是我第一次尝试使用sed / shell脚本。
感谢。
答案 0 :(得分:1)
最终,sed
不是这项工作的正确工具 - 因为您对'参数数量可以变量'的评论。如果你正在处理固定类型的固定数量的参数,你可以克服它,但是任何更一般的处理需要更通用的处理器(而不是sed
)。
我建议您尝试使用其他任务作为shell脚本和sed
的介绍。
如果你必须这样做,那么可能:
sed '/^[A-Za-z_][A-Za-z0-9_]* *[A-Za-z_][A-Za-z0-9]* *([A-Za-z_][A-Za-z0-9_]* *\([A-Za-z_][A-Za-z0-9_]*\) *, *[A-Za-z_][A-Za-z0-9_]* *\([A-Za-z_][A-Za-z0-9_]*\)[ ,)].*{/{p;a\
return \1 + \2;
}' $file
匹配的恐怖包含序列[A-Za-z_][A-Za-z0-9_]*
6次;它每次匹配一个标识符。来自“[ ,)].*{
的段与第三个或后续参数匹配。模式中的空格可能应该是“[<blank><tab>]
”字符类,但是在StackOverflow上输入它们会很痛苦。然后正则表达式匹配函数定义,并在“\(<identifier>\)
”部分中捕获两个变量的名称(示例中为arg1
和arg2
)。是:
p
- 打印已识别的行。a
- 将以下行附加到输出中;在这种情况下,一行包含一个return语句,它是两个记住的参数名称的总和。反斜杠表示还有另一行要追加的输出。大括号将操作组合在一起。某些版本的sed
支持比其他版本更强大的正则表达式;我不确定即使GNU sed支持PCRE(Perl兼容的正则表达式),也需要像PCRE这样的东西来显着降低正则表达式。
请注意,此脚本不会触及注释行“// function implementation
”。这是你的电话,你用它做了什么。
最后,请记住,如果您编写多个函数来将两个整数相加,那么您就是在浪费代码。因此,这不是一个看似合理的转变。不知何故,每个函数应该做一些不同的事情。当然,如果类型每次都不同,那么它可能有它的用途,但即便如此,编写生成器比解析骨架和填充位更容易。这可能是一个很好的脚本练习。