首先发布在这里。尝试使用正则表达式捕获SNMP回复中的整数输出。我使用了正则表达式测试程序来提供正确的模式匹配,但是sed拒绝输出结果。现在这只是一个原始的事实发现脚本,它会变得更复杂,但现在这是我的绊脚石。
对snmpget语句的每一行的回复是:
IF-MIB::ifInOctets.1001 = Counter32: 692749329
IF-MIB::ifOutOctets.1001 = Counter32: 3119381688
我想在" Counter32:"之后捕获值。正则表达式(?< = :)(\ d +)完成了我在网上找到的测试人员。
#!/bin/sh
SED_IFACES="-e '/(?<=: )(\d+)/g'"
INTERNET_IN=`snmpget -v 2c -c public 123.45.678.9 1.3.6.1.2.1.2.2.1.10.1001` | eval sed $SED_IFACES
INTERNET_OUT=`snmpget -v 2c -c public 123.45.678.9 1.3.6.1.2.1.2.2.1.16.1001` | eval sed $SED_IFACES
echo $INTERNET_IN
echo $INTERNET_OUT
答案 0 :(得分:1)
$ cat file
IF-MIB::ifInOctets.1001 = Counter32: 692749329
IF-MIB::ifOutOctets.1001 = Counter32: 3119381688
$ awk '{print $NF}' file
692749329
3119381688
$ sed 's/.* //' < file
692749329
3119381688
答案 1 :(得分:0)
你可以做到
sed 's/^.*Counter32: \(.*\)$/\1/'
捕获值并使用\ 1打印出来。
另请注意,您在示例中使用的是Perl正则表达式,而sed不支持这些。它也缺少替换“s /”部分。