我的头文件有很多#define语句,如:#define GPSVersion 0x000;
我想编写一个Bash脚本来将文本GPSVersion
解压缩到一个文件中。但是我如何使用grep来做到这一点?我可以找到模式#define
,但如何找到#define
之后的文字?感谢。
答案 0 :(得分:1)
echo "#define GPSVersion 0x000;" | awk '{print $2}'
cat file.h | grep ^'#define' | awk '{print $2}'
答案 1 :(得分:0)
试试这个使用Perl而不是grep的单行程序:
perl -ne 'print "$1\n" if $_ =~ /#define \b(\w+?)\b.*/' < header.h
其中header.h
是其中包含#define GPSVersion 0x000
的文件。
答案 2 :(得分:0)
步骤:
cat
您的档案。 (样本中echo
)命令:
echo "#define GPSVersion 0x000;" | grep ^"#defin" | cut -d" " -f2
答案 3 :(得分:0)
$find /path/to/root/of/source/tree -name '*.h' |
xargs grep '^#define.*GPSVersion' | cut -d' ' -f 2
<强>解释强>
find
命令将打印源树中名称以.h
结尾的所有文件 - 即所有头文件。
xargs
命令将文件名传递给grep
,这将打印以#define
开头的所有行,后跟一个或多个字符,然后是GPSVersion
cut
命令将打印第二个字段(文本为#define
d),使用空格字符作为字段之间的分隔符。
答案 4 :(得分:0)
我认为这适合你:
grep -r '#define[[:space:]]*GPSVERSION[[:space:]].*' . | tr -s ' \t' '\t' | cut -f 3
grep -r
:扫描指定目录和子目录中的所有文件
'#define[[:space:]]*GPSVERSION[[:space:]].*'
:是一个匹配所有#define指令的正则表达式,忽略whitespacing并仅考虑为其赋值的#defines。
Grep打印输出,然后输出传递给tr -s ' \t' '\t'
,将空格转换为适合cut
最后cut -f3
仅打印所需的定义值。
它运行良好,除了:注释定义(// #define)和带有空格的文件名。