2012-02-21 14 views
1

与えられたファイル "named.conf"から2つのフィールドを抽出するにはどうすればよいですか?フィールド 'ゾーン'と 'ファイル'が必要です。正規表現ファイルから複数行を抽出する

zone "example.com" IN { 
     type master; 
     file "db.example.com"; 
     allow-query { any; }; 
     allow-update { none; }; 
     allow-transfer { 10.101.100.2; }; 
}; 
+0

(1)Whaあなたは出力を見たいですか? (2)あなたのタイトルは "正規表現"を指定します。それは必要ですか? (3)何を試しましたか? – ruakh

+2

http://p3rl.org/BIND::Conf_Parser http://p3rl.org/BIND::Config:Parser http://p3rl.org/Net::DNS::ZoneFile::Fastは私が見つけたものですCPAN上で 'named.conf'を検索した後です。 – daxim

+0

@Daxim - これは答えが必要です:) – DVK

答えて

3

これはあなたのために働くかもしれない:

sed '/^\s*\(zone\|file\) "\([^"]*\)".*/,//!d;//!d;s//\2/' named.conf 
example.com 
db.example.com 
+0

この正規表現の仕組みを教えてください。 s // \ 2 /は何ですか? – Satish

2

このクイック&汚い(GNU)AWKプログラム(zone-file.awkとして保存)を試してみてください:次のように

/^zone/, /^}/ { 
    if (NF == 4) { 
     zone = $2 
     next 
    } 

    if (NF == 2 && $1 == "file") { 
     sub(";$", "", $2) 
     print zone, $2 
    } 
} 

それは私の作品:

$ awk -f zone-file.awk /etc/named.conf 
"." "named.ca" 
"localhost" "localhost.zone" 
[...] 
+2

私はそれを単純化するでしょう: 'awk '$ 1 ==" zone "|| $ 1 == "file" {print $ 2} "' –