需要快速perl脚本的帮助。我在Linux机器上有很多配置,我使用grep,egrep等将它存储在一个数组中。
打印数组@unix
会得到以下结果:
abc-xyz-1a.conf-virtual Hey {
abc-xyz-1a.conf-virtual How {
abc-xyz-1a.conf-virtual where {
abc-xyz-1b.conf-virtual Hey {
abc-xyz-1b.conf-virtual How {
abc-xyz-1b.conf-virtual where {
现在,如果你看看这个输出,我正在寻找一个正则表达式给我2个可能的东西。
首先是设备名称,这里我们可以看到有2种设备名称
abc-xyz-1a and abc-xyz-1b
其次,在虚拟"嘿",""如何"之后有不同类型的名称。 ,"其中"等。
我需要在一个无法做到的变量中提取这些值。
仅供参考,当我打印unix[0]
时,它会给出第一行,即
abc-xyz-1a.conf-virtual Hey {
任何建议将不胜感激。
答案 0 :(得分:0)
这样的事情应该有效:
#!/usr/bin/perl
use strict;
use warnings;
while ( <DATA> ) {
my ($device, $word) = /([a-z0-9-]+)\Q.conf-virtual\E\b(.+)\b/;
print "Device: $device -- Word: $word\n";
}
__DATA__
abc-xyz-1a.conf-virtual Hey {
abc-xyz-1a.conf-virtual How {
abc-xyz-1a.conf-virtual where {
abc-xyz-1b.conf-virtual Hey {
abc-xyz-1b.conf-virtual How {
abc-xyz-1b.conf-virtual where {
正则表达式细分:
# capture 1, match one or more of a lowercase letter, number, or dash
([a-z0-9-]+)
# \Q disables meta characters
# match .conf-virtual literally
# \E enables meta characters again
\Q.conf-virtual\E
# \b word boundary
# (.+) capture 2, match one or more of anything
# \b word boundary
\b(.+)\b
答案 1 :(得分:0)
您可以使用哈希表来记录这些信息,如下所示:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my %record;
while (<DATA>) {
chomp;
my ($key, undef, $val) = split /\.|\s+/;
push @{$record{$key}}, $val;
}
print Dumper(\%record);
__DATA__
abc-xyz-1a.conf-virtual Hey {
abc-xyz-1a.conf-virtual How {
abc-xyz-1a.conf-virtual where {
abc-xyz-1b.conf-virtual Hey {
abc-xyz-1b.conf-virtual How {
abc-xyz-1b.conf-virtual where {
测试:
$ perl t02.pl
$VAR1 = {
'abc-xyz-1a' => [
'Hey',
'How',
'where'
],
'abc-xyz-1b' => [
'Hey',
'How',
'where'
]
};