【发布时间】:2018-01-16 21:47:22
【问题描述】:
我知道如何通过在 perl 脚本中的文件中搜索单个字符串来提取一行,并且下面的命令工作得非常好,它给出了包含 255.255.255.255 的行。
my @newList = grep /255.255.255.255/, @File1;
但是,当我想在一个文件中搜索多个字符串(字段)时,grep 命令不起作用
我有下面的文件,如果 sourceipaddress、destipaddr 和端口号匹配,它应该提取整行并写入数组
git文件:
access abc permit tcp sourceipaddress sourcesubnetdestipaddr destsubnet eq 端口号
这是我选择解决问题的方法,即我根据字段进行拆分并使用 grep 在数组中搜索这些字段,但它似乎不起作用(尝试了 5 种不同的方法,如下所述,但这些命令都不起作用)。我只是想要一种在一行中搜索多个字符串(包括 ipaddress)的方法。请帮助我,因为我是 perl 新手,所以我正在努力解决这个问题。
my @columns = split(' ',$line);
my $fld0 = $columns[3];
my $fld3 = $columns[6];
my $fld5 = $columns[9];
#my @gitLines = grep {$_ =~ "$fld0" && $_ =~ "$sIP" && $_ =~ "$dIP" && $_ =~ "$fld5"} @gitFile;
#my @gitLines = @gitFile =~ /$fld0|$sIP|$dIP|$fld5/;
#my @gitLines = grep /$fld0/ && /$sIP/ && /$dIP/ &&/$fld5/,@gitFile;
#grep {$fld0} && {$sIP} && {$dIP} && {$fld5} @gitFile;
#my @gitLines = grep /255.255.255.255/ && /$fld0/, @File1;
我正在 Linux GNU/Linux 风格中尝试这个
【问题讨论】:
-
@gitFile中有什么内容?文件的所有行? -
如果我理解,您想提取文件中的所有 IP?这是对的吗?我们可以举一个输入的例子吗?
-
access-list firewall1 permit tcp 10.100.38.224 255.255.255.240 10.185.34.240 255.255.255.240 eq 9012...这就是内容的样子。我想根据第 3、4、6 和 9 个字段进行搜索并提取具有此组合的行
-
请:编辑问题并进行澄清。很多东西都不太清楚。 (顺便说一句,您的示例显示了第 3、第 6 和第 9 个字段——没有您在评论中提到的第 4 个字段?)
-
为了回答这个问题,我们需要一些示例数据和所需的输出。没有它,我们无法猜测到底发生了什么。请edit您的问题包括这些内容。
标签: perl