2013-03-28 54 views
0

shell脚本将传递一串参数。我期望解析出的键/值的位置可能会随时间而改变,即它可能在任何时候出现在另一个键之前或之后,因此两个键之间的解析不会成为选项。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访问,并且位置可能会改变,这不是一个选项

回答

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); 
0

如果您确实有perl,只需从您的shell脚本中使用这一行即可。

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

或者,如果你宁愿只是做与sed

domain=$(echo $* | sed 's/.*\<domain \([^ ]\+\).*/\1/') 
相关问题