Regex извлечь несколько строк из файла - PullRequest
1 голос
/ 22 февраля 2012

Как мне извлечь два поля из заданного файла "named.conf"? Я хочу, чтобы поля 'зона' и 'файл'.

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

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Это может работать для вас:

sed '/^\s*\(zone\|file\) "\([^"]*\)".*/,//!d;//!d;s//\2/' named.conf
example.com
db.example.com
2 голосов
/ 22 февраля 2012

Попробуйте эту программу AWK quick & dirty (GNU) (сохраните ее как 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"
[...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...