2012-02-21 9 views
1

주어진 파일 "named.conf"에서 두 개의 필드를 추출하려면 어떻게해야합니까? 필드 '영역'과 '파일'을 원합니다.정규식 파일에서 여러 줄 추출

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

(1) 결과물이 보이길 원하니? (2) 귀하의 제목은 "정규식"을 지정합니다. 그게 필요한가요? (3) 무엇을 시도 했습니까? – ruakh

+2

http://p3rl.org/BIND::Conf_Parser http://p3rl.org/BIND::Config::Parser http://p3rl.org/Net::DNS::ZoneFile:: 빠른 것은 내가 찾은 것입니다. 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 == "파일"{print $ 2} "' –