ʻAʻole i hiki ke hoʻohui iā MySQL: ʻAʻohe faila a papa kuhikuhi paha

Это довольно просто, например, 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/'
4
23.03.2018, 03:27
1 ответ

Используйте 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 не существует. Теперь ошибка имеет смысл.

1
12.11.2020, 03:52

Теги

Похожие вопросы