我正在编写一个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> ...
命令怎么能做到呢?答案中找不到这种情况。
谢谢
我正在编写一个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> ...
命令怎么能做到呢?答案中找不到这种情况。
谢谢
您可以使用类似
route -n | awk '/10.0.0/ { system("command to be executed with "$1) }'
^
added missing)
我们否定了使用grep的使用//搜索所需的文本,然后awk的系统功能沿执行命令以$ 1
使用文本替换形成shell命令会导致shell注入攻击。当然,对于攻击者将内容注入到'route -n'中可能会有些棘手 - 但这仍然是一个相当有问题的习惯用法。 –
尝试以下操作:
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获取更多详细信息
'awk /10[.]0[.]0/ {print $ 1}'避免需要单独的'grep'(在修复现有代码中的错误时:在'grep -e '10.0.0''中,正如在任何其他正则表达式中,'.'s是通配符;因此,'printf'%s \ n'10a0b0c | grep -e '10.0.0''匹配。 –
@CharlesDuffy我刚刚建议Unix拉曼寻找 - xargs与-L 1.当然,我们可以使用awk来执行此任务... –
如果您需要逐行处理事务,请考虑使用'while'循环,但也许如果您解释了最终目标,则另一种解决方案可能更适合 –
无引号'$ IPS'会不产生这种输出。 – chepner
你能告诉我们一个实际的例子,从你想要过滤的实际IP范围到你想从中形成的实际命令 – Inian