perl搜索子字符串并注释掉所有发生的事件
我是perl新手,但我必须编写一个perl脚本来搜索文件中的字符串并注释掉一些行。文件中文本的结构如下所示。我必须搜索一些关键字符串,例如“1,0.75,0.31,0” 这就是我想做的 下表: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.
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”打开文件,谢谢你的回复。我总是有相同数量的行属于一个条目,我可以找到搜索字符串。但我仍然有一个大问题,添加所有行,我必须注释出一个数组。我必须在一个文件中搜索并注释掉这些行。我可以用'+