【发布时间】:2015-10-19 04:38:36
【问题描述】:
我有一个遵循这种格式的命令输出(尽管有更多数据):
192.168.3.158:63402 <-> 192.168.3.1:boe-cms 0 0 1 1054 1 1054 2.000015920 0.0000
192.168.3.226:45873 <-> 192.168.2.117:boe-cms 0 0 1 1054 1 1054 2.000015840 0.0000
192.168.3.39:20224 <-> 192.168.3.55:boe-cms 0 0 1 1054 1 1054 2.000015760 0.0000
192.168.3.19:16442 <-> 192.168.2.102:boe-cms 0 0 1 1054 1 1054 2.000015680 0.0000
192.168.3.81:boe-cms <-> 192.168.3.78:4948 1 1054 0 0 1 1054 2.000015600 0.0000
192.168.3.158:8073 <-> 192.168.2.128:boe-cms 0 0 1 1054 1 1054 2.000015520 0.0000
192.168.3.247:powwow-client <-> 192.168.2.247:boe-cms 0 0 1 1054 1 1054 2.000015440 0.0000
192.168.2.212:boe-cms <-> 192.168.3.145:link 1 1054 0 0 1 1054 2.000015360 0.0000
192.168.3.165:26944 <-> 192.168.2.254:boe-cms 0 0 1 1054 1 1054 2.000015280 0.0000
192.168.2.239:boe-cms <-> 192.168.3.104:6307 1 1054 0 0 1 1054 2.000015200 0.0000
192.168.3.127:64857 <-> 192.168.3.24:boe-cms 0 0 1 1054 1 1054 2.000015120 0.0000
192.168.3.21:boe-cms <-> 192.168.3.103:856 1 1054 0 0 1 1054 2.000015040 0.0000
192.168.3.131:opendeploy <-> 192.168.2.169:boe-cms 0 0 1 1054 1 1054 2.000014960 0.0000
我最终想将 IP 地址解析为两个单独的列表。这应该很简单,但首先我想删除每行中第二个 IP 地址之后的数据。据我所知,我不能将空格视为列,因为它们不是制表符,所以我尝试从 7 个连续空格开始进行参数扩展(这表示 IP 的结束):
str="${str%%" "*}"
这会忽略行,并导致以下输出:
192.168.3.158:63402 <-> 192.168.3.1:boe-cms
那么我可以将命令更改为仅删除直到行尾,或者还有什么可以做同样的事情?我试过用 '\n' 替换 '*' 没有运气。谢谢!
【问题讨论】:
-
这种替换不是逐行操作的,这就是为什么你得到你所得到的。它会修剪 first 组(由七个空格组成)之后的所有内容。查看Bash FAQ 001 了解对逐行数据进行操作的方法。第一步是不要将所有内容都塞入一个变量中,这将无济于事(并使某些事情变得更加困难)。
标签: bash networking ip ip-address