1

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

4

3 回答 3

2

用这个替换你的 3 个 sed 命令:

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

或者:

sed -r 's/address = \[|\]//g' 

编辑:要删除无效的 IP,也可以使用这个 sed:

sed -r -e 's/address = \[|\]//g' -e 's/= +([^:]+\:){5,}.*$/=/' file
于 2013-11-13T13:36:48.933 回答
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

sort 可以在之前完成,但在 sed 和 grep 之后肯定会更快,因为 sed 也可以过滤行。(未测试,因为这里没有外壳)

于 2013-11-13T21:14:28.107 回答
1

尝试用sed以下命令替换您的三个命令

sed -nr 's/.*address = \[(([0-9]{1,3}\.){3}[0-9]{1,3})\].*/\1/p'
于 2013-11-13T18:00:55.930 回答