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

Linux 使用sed从列表中删除IPv6地址,linux,bash,sed,avahi,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/\]/

使用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:xxxx:xxxx这样的奇数场合地址 都显示在列表中,我想省略它们

我知道我可能会使用正则表达式或其他方法来确保数据始终与有效ip匹配,即xxx.xxx.xxx.xxx,但我不确定如何进行此操作。非常感谢您的帮助


该命令使用bash脚本在linux上运行,我希望它只返回xxx.xxx.xxx.xxx格式的有效ip地址。

用以下命令替换3个sed命令:

sed 's/address = \[\|\]//g' 
或:

编辑:要删除无效IP,请同时使用此sed:

sed -r -e 's/address = \[|\]//g' -e 's/= +([^:]+\:){5,}.*$/=/' file

将3个sed命令替换为以下命令:

sed 's/address = \[\|\]//g' 
或:

编辑:要删除无效IP,请同时使用此sed:

sed -r -e 's/address = \[|\]//g' -e 's/= +([^:]+\:){5,}.*$/=/' file
尝试用以下命令替换三个sed命令

sed -nr 's/.*address = \[(([0-9]{1,3}\.){3}[0-9]{1,3})\].*/\1/p'
尝试用以下命令替换三个sed命令

sed -nr 's/.*address = \[(([0-9]{1,3}\.){3}[0-9]{1,3})\].*/\1/p'
排序可以在sed之前完成,但在sed之后肯定会更快,而且不需要grep,因为sed也可以过滤行。没有测试,因为这里没有外壳



排序可以在sed之前完成,但在sed之后肯定会更快,而且不需要grep,因为sed也可以过滤行。未测试,因为此处不是shell

仅供参考,这些奇数地址是IPv6地址。我假设是这种情况,但在初始显示中,没有解析avahi的信息,它表示出于某种原因是IPv4地址。Ps我并没有说这些地址是奇怪的,只是它们只是在奇怪的场合才会显示出来;你为什么要那样?这些地址就是未来!由于目前正在使用的项目不支持除IPv4以外的任何内容,并且近期内也没有计划提供任何支持仅供参考,这些奇数地址都是IPv6地址。我假设情况是这样的,但是在最初显示时,没有解析avahi的信息,它说出于某种原因它是IPv4地址。Ps我并没有说这些地址是奇怪的,只是它们只是在奇怪的场合才会显示出来;你为什么要那样?这些地址就是未来!因为目前正在使用的项目不支持除IPv4以外的任何内容,而且近期内也没有计划支持。仍然显示与xxx.xxx.xxx.xxx格式不匹配的IP地址是的,我正在更新答案。奇怪的是,当我将其添加到bash脚本时,它不起作用。IPv6地址仍然会添加到列表中。您可以在问题中提供您的输入数据,但它不起作用。谢谢,我稍微修改了文件,这种方式现在适合我的用例。感谢您的帮助仍然显示与xxx.xxx.xxx.xxx格式不匹配的IP地址是的,我正在更新答案。奇怪的是,当我将答案添加到bash脚本时,它不起作用。IPv6地址仍然会添加到列表中。您可以在问题中提供您的输入数据,但它不起作用。谢谢,我稍微修改了文件,这种方式现在适合我的用例。谢谢你的帮助