批量替换C中的另一个函数名称

时间:2014-04-01 03:59:06

标签: python c shell text awk

如何使用标准工具/脚本替换C函数名称,例如:shell / awk / grep / python等?

例如,我需要在整个代码库中用assert(a>b)盲目地替换MyAssert(a>b)语句。只需更换功能名称。

3 个答案:

答案 0 :(得分:3)

您可以使用sed

sed -r 's/\bassert\(a>b\)\b/MyAssert(a>b)/' file
  • \b查找单词边界,以便查找完全匹配。
  • 这会将文件打印到STDOUT,您可以将其重定向到另一个文件,或使用-i选项在现有文件中就地进行更改。

答案 1 :(得分:2)

find . -iname "*.c" -exec sed -i.bak "s/assert/MyAssert/g" {} \;

这会将更改应用于当前目录下的每个.c文件,并创建包含原始文件的.c.bak文件。如果你想摆脱这些,你可以用它来删除它们:

find . -iname "*.bak" -exec rm {} \;

当然,请确保您先拥有所有内容的副本,我可能会搞砸了: - )

如果你想更仔细地捕捉案件,避免在另一个词的中间'断言',但是在一行的开头得到它,但它开始变丑,但仍然不完美:

find . -iname "*.c" -exec sed -i.bak -e "s/\([^a-zA-Z0-9S]\)assert(/\1MyAssert(/g" -e "s/^assert(/MyAssert(/" {} \;

答案 2 :(得分:1)

我写了一个Python脚本来解决这个问题。关于它的好东西:

  • 它不会修改任何不包含该字符串的文件。除非文件实际被修改,否则时间戳不会改变。

  • 您可以调整它,只查看与模式匹配的文件名(如*.c或其他)。

Replace strings in files by Python