正则表达式和sed在sh脚本中没有正确评估

时间:2015-05-22 18:09:59

标签: regex sed sh

首先发布在这里。尝试使用正则表达式捕获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

2 个答案:

答案 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 /”部分。