使用sed从列表中删除IPv6地址

时间:2013-11-13 13:33:02

标签: linux bash sed avahi

使用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地址。

3 个答案:

答案 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)