使用avahi我已经在我的网络范围内填充了一个IP地址列表。然后使用sed对填充的信息进行细化,以提供以下输出
Initial data = address = [xxx.xxx.xxx.xxx]
Refined data = xxx.xxx.xxx.xxx
执行此操作的命令如下:
avahi-browse -alrt | grep -w address | sort -u | sed -e 's/address = //' | sed -e 's/\[//' | sed -e 's/\]//'
这在大多数情况下正常工作但是在奇怪的场合地址,例如xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx 列表中显示,我想省略它们。
我知道我可以使用正则表达式或其他东西来确保数据总是与有效的ip匹配,即xxx.xxx.xxx.xxx,但我不确定如何解决这个问题。任何帮助深表感谢。
该命令使用bash脚本在linux上运行,我希望它只返回xxx.xxx.xxx.xxx格式的有效IP地址。
答案 0 :(得分:2)
用这个命令替换你的3个sed命令:
sed 's/address = \[\|\]//g'
OR:
sed -r 's/address = \[|\]//g'
编辑:要删除无效的IP,请使用此sed:
sed -r -e 's/address = \[|\]//g' -e 's/= +([^:]+\:){5,}.*$/=/' file
答案 1 :(得分:1)
尝试使用以下一个
替换三个sed
命令
sed -nr 's/.*address = \[(([0-9]{1,3}\.){3}[0-9]{1,3})\].*/\1/p'
答案 2 :(得分:1)
avahi-browse -alrt | sed -n "/address/ s/address = \[\(\([012]\{0,1\}[0-9]\{0,1\}[0-9]\.\)\{3\}[12]\{0,1\}[0-9]\{0,1\}[0-9]\)\].*/\1/p" | sort -u
排序可以在之前完成,但在sed和grep之后肯定更快,因为sed也可以过滤行。 (没有测试,因为这里不是shell)