0

我想在 sh 中编写一个脚本,对于每个给定的文件,对于每个 printf 出现,它将计算 % 的数量(或者 printf 函数接收的参数数量)并将 printf 重命名为 printfX,当 X 是那个号码。

我被卡住了,因为 printf 没有以新行结尾......

例如

printf("hello "
       "world %d\n", 1);

应该返回

printf1("hello "
       "world %d\n", 1);
4

2 回答 2

1

对此没有简单的(= 脚本中的)解决方案,因为要解析 C 代码,您需要一个LL(1) 解析器

但是您可以以相同的方式格式化所有代码,以便您的脚本可以处理不同的情况。所以你首先应该做的是找到所有有printf但没有的行);

grep "printf" ...files... | grep -v ");"

然后修复这些文件,直到您不再获得任何输出。

于 2012-08-09T15:23:08.473 回答
0

作为起点,一个简单的 Perl 脚本用于计算逗号或右括号前双引号中 % 字符的数量。

perl -0777pe 's/printf\s*\(\s*\"((?:[^"]*\"\s*\")*[^"]*)\"\s*([,)]\s*)/
  my ($f, $c, $t) = ($1, $1, $2);
  sprintf("printf%i(\"%s\"%s", ($c =~ tr-%--), $f, $t) /ges'  files ...

这将替换引用的字符串、注释等;它会抓住fprintfandsprintfmyownsacredprintfas well as plain printf

于 2012-08-09T16:18:15.397 回答