2017-05-26 32 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來執行此任務... –