【发布时间】:2018-08-24 23:19:39
【问题描述】:
我正在寻找一个 Perl sn-p 来将 C 标头中包含的数字 100 打印到终端。
#ifndef VERSIONS_H
#define VERSIONS_H
#define __SOFTWARE_REVISION__ 100
#endif
我可以提取#define 行,但是数字。
#!perl -w
use warnings;
use strict;
my $line;
my $file = shift @ARGV;
open my $fh, "<", $file or die $!;
while (<$fh>) {
print if /__SOFTWARE_REVISION__/;
}
close ($fh);
【问题讨论】:
-
这也会打印出使用宏的每一行。您需要在正则表达式中包含
#define部分。另外,查找捕获组以及如何匹配数字。 -
您可以使用
gcc以干净的格式获取定义:gcc -E -dM hdr.h | grep __SOFTWARE_REVISION__。除非你有其他理由使用 Perl 来解决这个问题。 -
在@rici 发表评论之后,我可能会建议使用
gcc来提取定义。 (然后在 Perl 中选择您需要的那个。我假设这是在 Perl 程序中出现的;我不会为此选择 Perl。)在我的答案中添加了评论。 -
一种特别令人发指的方法是使用
h2xs,因为它的真正目的是将C 头文件转换为Perl 的XS 胶水。但是,不要那样做。 :)
标签: c regex perl c-preprocessor