Perl имя хоста регулярное выражение - PullRequest
0 голосов
/ 13 марта 2012

У меня есть следующий фрагмент кода:

my $hostname =  `host \`hostname\``;

, который выдает что-то вроде:

blahblah.test1234.mydomain.com has address 12.345.67.8910 (я заменил реальные значения на фиктивные значения)

отсюда я хочу извлечь это так, чтобы $hostname имел только «blahblah.test1234.mydomain.com», а остальные -

. Такой фрагмент кода будет запускаться на разных серверах, поэтому его размер может варьироваться.

Я думал об использовании регулярного выражения, которое будет вырезано от начала строки до mydomain.com, поэтому в основном *.mydomain.com

Ответы [ 4 ]

3 голосов
/ 13 марта 2012

Возможно, вам было бы лучше использовать собственный perl gethostbyname или Net::DNS::Resolver, а не использовать программу командной строки.

2 голосов
/ 13 марта 2012

Просто используйте основной модуль Sys :: Hostname :

perl -MSys::Hostname -le 'print hostname'
1 голос
/ 13 марта 2012

Чтобы ответить на связанный вопрос в вашем коде (а именно: «Как определить каноническое имя заданного имени DNS-запроса»), см. Флаг AI_CANONNAME на Socket::getaddrinfo():

use strict;
use warnings;
use Socket qw( getaddrinfo AI_CANONNAME );

my ( $err, @res ) = getaddrinfo( $ARGV[0], "", { flags => AI_CANONNAME } );
die "$err\n" if $err;

print "$res[0]->{canonname}\n";
0 голосов
/ 13 марта 2012

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

$hostname =~ s/(.*?)\s+.*/\1/;

Будет выдано сообщение «blahblah.test1234.mydomain.com» для следующего:

$hostname = "blahblah.test1234.mydomain.com has address 12.345.67.8910";
$hostname =~ s/(.*?)\s+.*/\1/;
print($hostname);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...