Кашмир Posted October 26, 2007 Posted October 26, 2007 Опрашиваю циску 2610 на предмет загрузки канала. Получаю строка: enterprises.9.2.2.1.1.6.4 = 763000 нужно резать ее так, чтобы получить чисто только цифру 76000. т.е. отрезать все слева, включая знак равно с пробелом рядом. кто подкинет функцию. Я просто не умею с этими регулярными выражениями работать, или как они там называются. {/@} :) Ну только Perl, на других языках не нужно. Спасибо Вставить ник Quote
EvilShadow Posted October 26, 2007 Posted October 26, 2007 $str = "enterprises.9.2.2.1.1.6.4 = 763000"; $str =~ /.*\s(\d+)/; $val = $1; Искомое в $val Вставить ник Quote
Кашмир Posted October 26, 2007 Author Posted October 26, 2007 $str = "enterprises.9.2.2.1.1.6.4 = 763000";$str =~ /.*\s(\d+)/; $val = $1; Искомое в $val Спасибо огромное, сейчас буду пробывать! Вставить ник Quote
Кашмир Posted October 26, 2007 Author Posted October 26, 2007 (edited) Не хочет, пусто выдает: $str=system("/usr/local/bin/snmpget 00.00.00.00 public .1.3.6.1.4.1.9.2.2.1.1.6.4"); $str =~ /.*\s(\d+)/; $val = $1; print "Вход: $val"; Выдает: router# /usr/home/test/shaper.pl enterprises.9.2.2.1.1.6.4 = 708000 Вход: router# Трабла в system :) А так ваше сообщение верное Edited October 26, 2007 by Кашмир Вставить ник Quote
_djbdb Posted October 30, 2007 Posted October 30, 2007 у Perl есть модуль для работы с SNMP http://search.cpan.org/~dtown/Net-SNMP-5.2.0/lib/Net/SNMP.pm тут можно почитать подробнее, если интересно.. установить модуль можно так (в командной строке с правами рута) >perl -MCPAN -e shell >install Net::SNMP >quit а вот пример использования данного модуля под Вашу цель #! /usr/bin/perl use strict; use Net::SNMP; my ($session, $error) = Net::SNMP->session( -hostname => shift || '172.16.1.12', -community => shift || 'public', -port => shift || 161 ); if (!defined($session)) { printf("ERROR: %s.\n", $error); exit 1; } my $sysTrafIn = '1.3.6.1.4.1.9.2.2.1.1.6.4'; my $result = $session->get_request( -varbindlist => [$sysTrafIn] ); if (!defined($result)) { printf("ERROR: %s.\n", $session->error); $session->close; exit 1; } printf("Link_InComing_Traffic for host '%s' is %s\n", $session->hostname, $result->{$sysTrafIn} ); $session->close; exit 0; примерно так.. :) Вставить ник Quote
Валентин. Posted October 30, 2007 Posted October 30, 2007 Не хочет, пусто выдает: $str=system("/usr/local/bin/snmpget 00.00.00.00 public .1.3.6.1.4.1.9.2.2.1.1.6.4"); $str =~ /.*\s(\d+)/; $val = $1; print "Вход: $val"; Выдает: router# /usr/home/test/shaper.pl enterprises.9.2.2.1.1.6.4 = 708000 Вход: router# Трабла в system :) А так ваше сообщение верное $str=`/usr/local/bin/snmpget 00.00.00.00 public .1.3.6.1.4.1.9.2.2.1.1.6.4`; $str =~ s/.*= (\d+)0\n/$1/; print "Вход: $str"; Но лучше воспользоваться модулем для работы с SNMP. ИМХО Вставить ник Quote
orca Posted November 1, 2007 Posted November 1, 2007 Без регулярных выражений my $input="enterprises.9.2.2.1.1.6.4 = 763000"; my @tmp=split("=",$input); substr($tmp[1], 0, 1) = ""; Результат в $tmp[1] Регулярное выражение my $input="enterprises.9.2.2.1.1.6.4 = 763000"; $input=~s/^.*= (.*)$/$1/g; Результат в $input Сам использую Net::SNMP Но там тоже мороки много :) Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.