我一直在寻找一种解决方案,允许我搜索数组的行,如果匹配字符串,则将该行和前两行推入数组.看起来这很容易使用grep命令完成.但是,我不能让这个工作.这就是我所拥有的:
sub ipsearch {
my $ip = $_[0];
my @IPVSCONFIG = grep (/\W+virtual\s$ip\s/, @RAWDATA);
}
Run Code Online (Sandbox Code Playgroud)
是否可以在grep命令中添加"-B 2"语法?我已经尝试了这种语法的几种形式,但我无法让它工作:
@IPVSCONFIG = grep -B 2 (/\W+virtual\s$ip\s/, @RAWDATA);
Run Code Online (Sandbox Code Playgroud)
如果可能的话,请告诉我,以及正确的语法应该是什么.如果您有任何其他建议,请告诉我.
谢谢您的帮助!
诀窍是识别匹配发生的行,然后识别相关的索引:
获取匹配的索引:
my @matchedIndices = grep { $RAWDATA[$_] =~ /\W+virtual\s$ip\s/ } 2 .. $#RAWDATA;
Run Code Online (Sandbox Code Playgroud)
得到指数:
my @wantedIndices = map { ( $_-2 .. $_ ) } @matchedIndices;
Run Code Online (Sandbox Code Playgroud)
并采取数组切片:
my @IPVSCONFIG = @RAWDATA[ @wantedIndices ];
Run Code Online (Sandbox Code Playgroud)
将它完全放在Schwartzian变换中:
my @IPVCONFIG = map { @RAWDATA[$_-2..$_] }
grep { $RAWDATA[$_] =~ /\W+virtual\s$ip\s/ }
2 .. $#RAWDATA ;
Run Code Online (Sandbox Code Playgroud)
绝对是比传统命令行更繁忙的解决方案grep -B 2!
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |