Это довольно просто, например, perl
, если это возможно. Разберите запись на пары ключ-значение, а затем извлеките / сопоставьте нужное поле:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
#set record separator to 'end bracket'.
local $/ = '}';
#iterate our data based on that delimiter.
#note - <> is a magic filehandle, in that it reads either pipe
#from stdin, or a file argument specified on command like (e.g. like awk/sed)
while (<>) {
#extract key-value pairs with a multi line regex for this 'block'
my %fields = m/(\w+)\s+(.*)$/gm;
print Dumper \%fields; #to see what we captured for debugging.
#test a particular field against a regex. Note - this matches
#both in your example.
if ( $fields{service_description} =~ m/Multi Lookup/ ) {
print "This record matches\n";
}
}
Каждая запись в приведенном выше примере помещается в поля и представляет собой хэш perl
, содержащий:
$VAR1 = {
'define' => 'service {',
'use' => 'standard_service_template',
'check_period' => '24x7',
'host_name' => 'dns_vips',
'service_description' => 'Multi Lookup ',
'active_checks_enabled' => '1',
'passive_checks_enabled' => '1',
'notification_interval' => '10',
'notification_period' => '24x7',
'contact_groups' => 'mailgrp',
'max_check_attempts' => '3',
'notifications_enabled' => '1',
'notification_options' => 'w,r,c',
'normal_check_interval' => '5',
'retry_check_interval' => '1'
};
] При желании это можно было бы сжать в один лайнер, я уверен, но вам нужно будет немного конкретизировать, что вы на самом деле хотите в качестве вывода.
например.
perl -ne 'BEGIN { $/ = "}" } %f = m/(\w+)\s+(.*)$/gm; print if $f{service_description} =~ m/Multi Lookup/'
Или, возможно, еще проще:
perl -ne 'BEGIN { $/ = "}" } print if m/service_description.*Multi Lookup/'
Используйте 127.0.0.1
вместо localhost
.
localhost
имеет особое значение в mysqli (из MySqli Quick Start Guide -Connections):
The hostname localhost has a special meaning. It is bound to the use of Unix domain sockets. It is not possible to open a TCP/IP connection using the hostname localhost you must use 127.0.0.1 instead.
. если вы используете localhost
, mysqli попытается использовать сокеты unix вместо использования сети TCP. Поскольку сервер mysql не работает локально, файл сокета unix не существует. Теперь ошибка имеет смысл.