perl搜索子字符串并注释掉所有发生的事件

perl搜索子字符串并注释掉所有发生的事件,perl,search,replace,append,Perl,Search,Replace,Append,我是perl新手,但我必须编写一个perl脚本来搜索文件中的字符串并注释掉一些行。文件中文本的结构如下所示。我必须搜索一些关键字符串,例如“1,0.75,0.31,0” 这就是我想做的 下表: start_pos { string-to-search <1, 0.75, 0.31, 0> #FOUND HERE } do { a 0.1 d 0.6 s 0.325 r 0.029 } start_pos { other-string<1, 0.

我是perl新手,但我必须编写一个perl脚本来搜索文件中的字符串并注释掉一些行。文件中文本的结构如下所示。我必须搜索一些关键字符串,例如“1,0.75,0.31,0”

这就是我想做的

下表:

start_pos {
string-to-search <1, 0.75, 0.31, 0> #FOUND HERE
}
do {
   a 0.1
   d 0.6
   s 0.325
   r 0.029
   }


start_pos {
other-string<1, 0.71, 0.32, 0>
    }
   do {
   a 0.1
   d 0.6
   s 0.325
   r 0.029
   }

start_pos {
string-to-search <**1, 0.75, 0.31, 0**> #FOUND HERE
}
do {
    a 0.1
    d 0.6
   s 0.325
   r 0.029
   }
start\u pos{
要搜索的字符串#在此处找到
}
做{
a 0.1
d 0.6
s 0.325
r 0.029
}
开始位置{
其他字符串
}
做{
a 0.1
d 0.6
s 0.325
r 0.029
}
开始位置{
要搜索的字符串#在此处找到
}
做{
a 0.1
d 0.6
s 0.325
r 0.029
}
这个应该被淘汰

//     start_pos {
//     string-to-search <1, 0.75, 0.31, 0> #FOUND HERE !!!
//     }
//     do {
//        a 0.1
//        d 0.6
//        s 0.325
//        r 0.029
//        }


start_pos {
other-string<1, 0.71, 0.32, 0>
    }
   do {
   a 0.1
   d 0.6
   s 0.325
   r 0.029
   }

//     start_pos {
 //    string-to-search <**1, 0.75, 0.31, 0**> #FOUND HERE !!!
//     }
//     do {
//         a 0.1
//         d 0.6
//        s 0.325
//        r 0.029
//      }
//启动位置{
//要搜索的字符串#在此处找到!!!
//     }
//做{
//a 0.1
//d 0.6
//s 0.325
//r 0.029
//        }
开始位置{
其他字符串
}
做{
a 0.1
d 0.6
s 0.325
r 0.029
}
//开始位置{
//要搜索的字符串#在此处找到!!!
//     }
//做{
//a 0.1
//d 0.6
//s 0.325
//r 0.029
//      }
我可以找到子字符串,但是我不知道如何注释从“start_pos”到“}”的行

请帮忙


提前感谢

如果一个条目的行数始终相同,那么只要看到
start\u pos
,您就可以拾取一个数组中的九行

然后你可以搜索你的字符串。如果没有,请按原样打印行。如果有,请将所有行的
^
开头替换为注释
/
,然后打印行

my @entry;

# pickup the lines
# and search for the string

if (found) {
    foreach my $line (@entry) {
        $line =~ s!^!// !;
    }
}

foreach my $line (@entry) {
    print "$line";
}
更新:

完整示例

使用警告;
严格使用;
我的@entry;
我的$collecting=0;
我的$found=0;
而(){
如果(m/start\U pos/){
#开始收集线路
$collection=1;
}
如果(收取){
#模式测试
如果(m/1,0\.75,0\.31,0/){
$found=1;
}
#皮卡线
推送@entry,$\ux;
}否则{
#如果不在块内,只需打印行即可
打印美元;
}
#如果收集到9行
如果($#条目==8){
如有($已找到){
#以注释作为前缀
foreach my$行(@entry){
$line=~s!^!/!;
}
}
#打印块
foreach my$行(@entry){
打印“$line”;
}
#为下一个块重置变量
@条目=();
$collecting=$found=0;
}
}

如果一个条目的行数始终相同,则只要看到
start\u pos
,就可以拾取阵列中的九行

然后你可以搜索你的字符串。如果没有,请按原样打印行。如果有,请将所有行的
^
开头替换为注释
/
,然后打印行

my @entry;

# pickup the lines
# and search for the string

if (found) {
    foreach my $line (@entry) {
        $line =~ s!^!// !;
    }
}

foreach my $line (@entry) {
    print "$line";
}
更新:

完整示例

使用警告;
严格使用;
我的@entry;
我的$collecting=0;
我的$found=0;
而(){
如果(m/start\U pos/){
#开始收集线路
$collection=1;
}
如果(收取){
#模式测试
如果(m/1,0\.75,0\.31,0/){
$found=1;
}
#皮卡线
推送@entry,$\ux;
}否则{
#如果不在块内,只需打印行即可
打印美元;
}
#如果收集到9行
如果($#条目==8){
如有($已找到){
#以注释作为前缀
foreach my$行(@entry){
$line=~s!^!/!;
}
}
#打印块
foreach my$行(@entry){
打印“$line”;
}
#为下一个块重置变量
@条目=();
$collecting=$found=0;
}
}

Hi Olaf,感谢您的回复。我总是有相同数量的行属于一个条目,我可以找到搜索字符串。但我仍然有一个大问题,添加所有行,我必须注释出一个数组。我必须在一个文件中搜索并注释掉这些行。我可以用“+Hi Olaf”打开文件,谢谢你的回复。我总是有相同数量的行属于一个条目,我可以找到搜索字符串。但我仍然有一个大问题,添加所有行,我必须注释出一个数组。我必须在一个文件中搜索并注释掉这些行。我可以用'+