如何使用标准工具/脚本替换C函数名称,例如:shell
/ awk
/ grep
/ python
等?
例如,我需要在整个代码库中用assert(a>b)
盲目地替换MyAssert(a>b)
语句。只需更换功能名称。
答案 0 :(得分:3)
您可以使用sed
sed -r 's/\bassert\(a>b\)\b/MyAssert(a>b)/' file
\b
查找单词边界,以便查找完全匹配。 -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
或其他)。