我有一个脚本,该脚本应在特定的UDP端口上进行端口扫描,并检查是否可以对正确的服务字符串进行grep。 看起来如下: Nmap返回以下内容(对于root和User nagios相同):
Starting Nmap 6.40 ( http://nmap.org ) at 2019-02-23 12:33 CET Nmap scan report for 172.32.0.1 Host is up. PORT STATE SERVICE 1194/udp open|filtered openvpn Nmap done: 1 IP address (1 host up) scanned in 2.08 seconds
现在我在脚本中使用它:
f_result=`echo $result | egrep -o "${port}/udp [a-zA-Z0-9_-\| ]+Nmap done"`
这就是我感到困惑的地方。我不是自己写的,也不是bash上最好的KnowHow。 因为:
如果我执行脚本,则在grep的那一部分,一个用户报告错误,另一个则没有。 该脚本对于root用户来说可以正常工作,但是对于“ nagios”用户来说,它将返回:
egrep: Invalid range end
该错误必须在反斜杠周围出现,但是我不明白,它如何与rot一起使用,而不能作为其他用户使用?是某种禁止的符号吗?
我想这是第8层问题,所以很抱歉这是一个愚蠢的问题。
答案 0 :(得分:0)
更好的解决方案是:
f_result=$(grep -oP "${port}/udp.*?Nmap done" <<< "$result")
grep -P启用Perl正则表达式。