sed:修改函数参数

时间:2011-03-03 08:57:31

标签: function sed arguments

我正在尝试编写一个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脚本。

感谢。

1 个答案:

答案 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>\)”部分中捕获两个变量的名称(示例中为arg1arg2)。是:

  1. p - 打印已识别的行。
  2. a - 将以下行附加到输出中;在这种情况下,一行包含一个return语句,它是两个记住的参数名称的总和。反斜杠表示还有另一行要追加的输出。大括号将操作组合在一起。
  3. 某些版本的sed支持比其他版本更强大的正则表达式;我不确定即使GNU sed支持PCRE(Perl兼容的正则表达式),也需要像PCRE这样的东西来显着降低正则表达式。

    请注意,此脚本不会触及注释行“// function implementation”。这是你的电话,你用它做了什么。

    最后,请记住,如果您编写多个函数来将两个整数相加,那么您就是在浪费代码。因此,这不是一个看似合理的转变。不知何故,每个函数应该做一些不同的事情。当然,如果类型每次都不同,那么它可能有它的用途,但即便如此,编写生成器比解析骨架和填充位更容易。这可能是一个很好的脚本练习。