2017-05-26 88 views
0

我正在编写一个bash脚本来在无线网络中注册远程主机。我得到远程IP,但我需要帮助来解析输出。这里是我的输出:路由命令中的Bash解析输出

$ IPS=`route -n | grep -e '10.0.0' | awk '{ print $1 }'` 
$ echo $IPS 
10.0.0.2 
10.0.0.3 

我需要这些IP,并插入到像... <remote_ip_1> ...

命令怎么能做到呢?答案中找不到这种情况。

谢谢

+0

如果您需要逐行处理事务,请考虑使用'while'循环,但也许如果您解释了最终目标,则另一种解决方案可能更适合 –

+3

无引号'$ IPS'会不产生这种输出。 – chepner

+0

你能告诉我们一个实际的例子,从你想要过滤的实际IP范围到你想从中形成的实际命令 – Inian

回答

0

您可以使用类似

route -n | awk '/10.0.0/ { system("command to be executed with "$1) }' 
                   ^
                  added missing) 

我们否定了使用grep的使用//搜索所需的文本,然后awk的系统功能沿执行命令以$ 1

+1

使用文本替换形成shell命令会导致shell注入攻击。当然,对于攻击者将内容注入到'route -n'中可能会有些棘手 - 但这仍然是一个相当有问题的习惯用法。 –

0

尝试以下操作:

route -n | grep -e '10.0.0' | awk '{ print $1 }' | xargs -L 1 your_command 

例如,请尝试以下操作:

route -n | grep -e '10.0.0' | awk '{ print $1 }' | xargs -L 1 echo "===>" 

参数-L 1告诉xargs为每个IP运行一个命令。请参阅man xargs获取更多详细信息

+0

'awk /10[.]0[.]0/ {print $ 1}'避免需要单独的'grep'(在修复现有代码中的错误时:在'grep -e '10.0.0''中,正如在任何其他正则表达式中,'.'s是通配符;因此,'printf'%s \ n'10a0b0c | grep -e '10.0.0''匹配。 –

+0

@CharlesDuffy我刚刚建议Unix拉曼寻找 - xargs与-L 1.当然,我们可以使用awk来执行此任务... –