我有一个像这样的文本文件
< MSSQLSTART >
select metric,value,Date
from temp1
< MSSQLEND >
< MYSQL-START >
select metric,value,Date
from temp1
< MYSQL-END >
现在我想提取特定标签之间的界限。从技术上讲,希望从文件中提取这两个sql查询并执行这些查询并将结果保存到单独的文件中并比较结果。
如果有人可以帮我在perl中编写代码,那将非常有用
我尝试使用以下代码提取行,但如果字符串匹配但不在行之间打印整个文件...
use strict;
use warnings;
undef $/;
open (FILE, '<', 'input.txt') or die "Could not open file: $!";
while (<FILE>) {
print $_ if /<MSSQLSTART>/../<MSSQLEND>/;
}
答案 0 :(得分:1)
你为什么undef $/
?它立即加载整个文件。如果要逐行处理文件,请不要触摸变量。
如果你想提取没有标签的行,你可以检查触发器操作符返回的值:它返回从1开始的行数,最后一行的数字附加E0
:
while (<FILE>) {
my $i = /< MYSQL-START >/ .. /< MYSQL-END >/; # SO syntax highlighting bug /
if ($i && $i != 1 && $i !~ /E0$/) {
print;
}
}
答案 1 :(得分:0)
这是一种方式:
use warnings;
use strict;
open my $fh, "<", "abc.txt" or die "Could not open file: $!";
while (<$fh>) {
if (/< .*START >/../< .*END >/)
{
print $_ unless /< .*START >/ or /< .*END >/;
}
}
输出:
select metric,value,Date
from temp1
select metric,value,Date
from temp1