2013-03-28 56 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/') 
相關問題