Bash:参数扩展行尾字符

时间:2015-07-28 14:34:59

标签: bash networking ip ip-address

我有一个遵循这种格式的命令输出(尽管有更多数据):

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'替换'*'没有运气。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将此awk命令与字段分隔符一起用作:或空格来获取这两个IP地址:

awk -F '[: ]+' '{print $1, $4}' file
192.168.3.158 192.168.3.1
192.168.3.226 192.168.2.117
192.168.3.39 192.168.3.55
192.168.3.19 192.168.2.102
192.168.3.81 192.168.3.78
192.168.3.158 192.168.2.128
192.168.3.247 192.168.2.247
192.168.2.212 192.168.3.145
192.168.3.165 192.168.2.254
192.168.2.239 192.168.3.104
192.168.3.127 192.168.3.24
192.168.3.21 192.168.3.103
192.168.3.131 192.168.2.169

如果您从命令获得输入,请使用:

command | awk -F '[: ]+' '{print $1, $4}'