我有一个脚本,我从txt文件读取字符串,然后将其分配给$ snmp_cred变量,然后尝试从字符串中删除ip地址,使用grep到另一个变量($ snmp_ip)
while read snmp_cred; do
echo appliance $ADDM_address and $snmp_cred
snmp_ip=$(echo $snmp_cred | grep "/((25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\d(?=@)/g")
echo IP for snmp community is $snmp_ip
done </tmp/input.txt
input.txt文件的内容是:
a10networks/generic/1.3.6.1.4.1.22610.1.3.27_thunder_series4430s/10.72.168.33@public
a10networks/generic/1.3.6.1.4.1.22610.1.3.23_thunder_series1030s/172.17.48.24@public
a10networks/generic/1.3.6.1.4.1.22610.1.3.16_ax3200_12/10.251.1.101@public
正则表达式适用于在线正则表达式编辑器,但无法进入bash脚本。 Bash输出是:
++ echo $'a10networks/generic/1.3.6.1.4.1.22610.1.3.27_thunder_series4430s/10.72.168.33@public\r'
++ grep '/((25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\d(?=@)/g'
+ snmp_ip=
+ echo IP for snmp community is
IP for snmp community is
任何人都可以指出,我做错了什么?
答案 0 :(得分:1)
由于您没有获得匹配的文本,因此您并不需要POSIX正则表达式不支持的前瞻。另请注意,POSIX正则表达式标准也不支持void uncaughtExceptionHandler(NSException *exception)
{
NSLog(@"CRASH: %@", exception);
NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
// do your handling
}
。此外,\d
模式不应放在正则表达式分隔符中。
如果你仍然需要使用你的模式(比如,也可以获取匹配项),请使用grep
选项:
-oP
答案 1 :(得分:0)
在此声明中:
snmp_ip=$($snmp_cred | grep "/((25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\d(?=@)/g")
您只是在扩展变量,而不将其传递给grep
你需要将它作为参数传递给grep(以文件重定向的形式)或者将它发送给greps STDIN。
这对我有用
#!/bin/bash
while read snmp_cred; do
#echo appliance $ADDM_address and $snmp_cred
snmp_ip=$(grep -E -o "((25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)@" <<< $snmp_cred)
echo IP for snmp community is $snmp_ip
done <input.txt
输出:
IP for snmp community is 10.72.168.33@
IP for snmp community is 172.17.48.24@
IP for snmp community is