日期:2014-05-16  浏览次数:20795 次

命令求解:去掉#define语句中的sizeof()
我有一个含子目录的目录,里面很多头文件.h,现在要把每个头文件中的所有#define语句中出现的sizeof去掉。
如下例子,文件fruit.h中
#define APPLE sizeof(red)
#define (Orange) sizeof(org)
#define banana (sizeof(yellow))
经过处理后的fruit.h应该为:
#define APPLE red
#define (Orange) org
#define banana (yellow)

特别需要注意的是后括号的去除,这是必须的。
现学现用sed命令没能想出来。
求高手赐教,加上注释和思路更完美。

------解决方案--------------------
没有去掉sizeof后面的括号,但效果是一样的,多一个括号不影响编译
Perl code
#! /bin/sh

for i in *.h; do
sed -i 's/sizeof//g' $i
done

------解决方案--------------------
C/C++ code
cat def.txt | sed -r 's/^(#define.*)sizeof\((.*)\)/\1\2/'

------解决方案--------------------
Python code
$ sed 's/^\(#define.*\)sizeof(\(.*\))$/\1\2/' file
#define APPLE red
#define (Orange) org
#define banana (yellow)

------解决方案--------------------
探讨
没有去掉sizeof后面的括号,但效果是一样的,多一个括号不影响编译