0

シェル スクリプトには、一連の引数が渡されます。解析しようとしているキー/値の位置は、時間の経過とともに変化する可能性があります。つまり、いつでも別のキーの前または後に来る可能性があるため、2 つのキー間の解析はオプションではありません。

次のような文字列からドメインキーを解析しようとしています。

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 をお持ちの場合は、シェル スクリプトからこのワンライナーを使用してください。

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

または、単に次のようにしたい場合sed:

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