Как я могу использовать sed, чтобы получить только имя сервера имен из вывода dig? - PullRequest
1 голос
/ 25 октября 2009

Я работаю в компании, которая предлагает услуги веб-хостинга и DNS. Мы пытаемся перенести все на новые серверы, и мы часто сталкиваемся с устаревшими файлами зон на наших серверах, поскольку клиенты меняют свои авторитетные серверы на других.

Я пытаюсь написать скрипт, который будет проверять информацию whois, ns и SOA, чтобы определить, использует ли домен нас в качестве авторитетного сервера.

Я пытаюсь использовать sed, чтобы отфильтровать вывод следующего для отображения только сервера имен без завершающего символа ".":

dig +noall +answer soa yahoo.com | sed 's/.*SOA\s*//' | sed 's/\.$//'

Я искал в сети, но большинство примеров команд sed работают со словами "lines" вместо "Words".

Желаемый результат будет следующим:

$ dig +noall +answer soa yahoo.com | sed '<Some SED code here>'
ns1.yahoo.com

Любые предложения будут полезны.

Ответы [ 3 ]

3 голосов
/ 25 октября 2009

Вместо того, чтобы использовать удаление части, которая вам не нужна, я бы предложил использовать заключенное в скобки подвыражение для определения нужного бита следующим образом:

dig +noall +answer soa yahoo.com | sed 's/.*SOA\s*//' | sed 's/^\([^ ]*\). .*/\1/g'

При этом выполняется поиск строки, начинающейся с некоторых непробельных символов, за которыми следуют точка, пробел, а затем остальная часть строки. Он заменяет этот шаблон только битом перед точкой (который является подвыражением # 1).

3 голосов
/ 25 октября 2009

при работе со структурированными данными проще использовать awk

$ dig +noall +answer soa yahoo.com | awk '{sub(/.$/,"",$5);print $5}'
ns1.yahoo.com
2 голосов
/ 25 октября 2009

Для подсчета количества слов в строке:

awk '{ print NF }'

Например:

printf 'foo bar\nbar\nfoo bar zim' | awk '{ print NF }'

Печать:

2
1
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...