我的数据文件如下
extern const
extern const
/*****************************************************************************
* Data *
*****************************************************************************/
#ifdef SELECTED
/*****************************************************************************
* comments *
*****************************************************************************/
int test_data1_value;
int test_data2_value;
int test_data3_value;
int test_data4_value;
#endif
random data
random data
/**********************************************************************
* definitions *
**********************************************************************/
#define
#define
我需要提取以“uint8”开头的数据行到注释“test data buffer”和“receive signal definations”
怎么可以这样做我写了一个像
while (<DATA>) {
chomp;
if (/^\*\s* Data / ... /^\*\s*definitions/) {
if (m/^\s*int/) {
print "$_";
}
}
}
我需要将其视为
int test_data1_value;
int test_data2_value;
int test_data3_value;
int test_data4_value;
匹配特定注释字符串后,应检查以int开头的行并打印整行。如果行的开头没有int,则应该排除该特定行。但是这段代码对我不起作用
答案 0 :(得分:2)
我不知道你想对#ifdef
和#endif
之间的数据做些什么,但看起来如何过滤这些数据是你的主要问题,所以这里是如何通过使用operator ...
,可用于指示行范围,正是我们所需要的:
#!/usr/bin/perl
use strict;
use warnings;
while (<DATA>) {
chomp;
if (/^\s*\*\s*test Data Buffer/ ... /^\s*\*\s*Receive signal definitions/) {
if (m/^\s*uint8/) {
print "$_\n";
}
}
}
__DATA__
random data
#ifdef CAN_CH0_SELECTED
/*****************************************************************************
* test Data Buffer *
*****************************************************************************/
uint8 test_data1_value;
uint8 test_data2_value;
uint8 test_data3_value;
uint8 test_data4_value;
#endif
random data
random data
/*****************************************************************************
* test Data Buffer *
*****************************************************************************/