0

shell 脚本将传递一个参数字符串。我要解析的键/值的位置可能会随着时间而改变,即它可能随时出现在另一个键之前或之后,因此在两个键之间进行解析不是一种选择。

我希望从这样的字符串中解析域密钥:

maxpark 0 maxsub n domain sample.foo maxlst n max_defer_fail_percentage user oli force no_cache_update 0 maxpop n maxaddon 0 locale en contactemail

键是“域”,值是“sample.foo”。域密钥可以有多个“.”。在其中,所以我需要获取整个域密钥。

我不是最擅长正则表达式,但我想使用“sed”是我需要做的。

我正在使用 $* 访问这个完整的字符串,如果我可以通过访问 $DOMAIN 来简单地引用密钥,那就太好了,但是因为我唯一的选择是基于位置访问 $3,并且位置可能会改变,那不是一个选项

4

2 回答 2

0

使用 PERL 解决了这个问题。

#!/usr/bin/perl -w

use strict;

my %OPTS = @ARGV;

open(FILE, "</var/named/$OPTS{'domain'}.db") || die "File not found";
my @lines = <FILE>;
close(FILE);

my @newlines;
foreach(@lines) {
   $_ =~ s/$LOCAL_IP/$PUBLIC_IP/g;
   push(@newlines,$_);
}

open(FILE, ">/var/named/$OPTS{'domain'}.db") || die "File not found";
print FILE @newlines;
close(FILE);
于 2013-03-28T09:00:30.077 回答
0

如果你有 perl,只需使用你的 shell 脚本中的这一行。

domain=$( echo $* | perl -ne '/domain\s([^\s]+)\s/ and print "$1"' )

或者,如果您只想这样做sed

domain=$( echo $* | sed 's/.*\<domain \([^ ]\+\).*/\1/' )
于 2013-03-28T09:02:46.817 回答