2009-11-22 100 views
0

我新的shell腳本,現在使用csh,讓我們說我有這樣的在我的配置文件中的一行:刪除符號

127.0.0.1:2222 127.0.0.2:3333 127.0.0.3:4444 

所有我想要的是分析它的兩個變量在陣列:

2222 3333 4444 

而另一個

127.0.0.1 127.0.0.2 127.0.0.3 
+0

第一行在配置文件中。
後面兩行在shell變量中:
a [0] = 2222,a [1] = 3333,a [2] = 4444
b [0] = 127.0.0.1,b [1] = 127.0 .0.2,b [2] = 127.0.0.3
是嗎?是更多?你想用這些零件做什麼? – Don 2009-11-22 02:19:50

+0

@Ebbcom:當你接受答案時,你可以賺取幾點積分,並讓那些讓你可以接受的答案開心。 – 2009-11-22 18:14:15

回答

2

讀 'C Shell Programming Considered Harmful'。

如何在配置文件中獲得正確的行?我打算假定文件中只有一行,但只要你能識別該行,就有辦法做到這一點。

set var1=`sed 's/[0-9.]*:\([0-9]*\)/\1/g' config.file` 
set var2=`sed 's/\([0-9.]*\):[0-9]*/\1/g' config.file` 

第一個捕獲點號十進制地址後的'端口號'。第二個捕獲地址。在每種情況下,結果都被分配給一個空格分隔值的字符串。


一些更多的手動撲(在Mac OS X 10.5.8 - '人CSH' 打印'tcsh的頁面)可提供您可能是後:

set arr1=(`sed 's/[0-9.]*:\([0-9]*\)/\1/g' config.file`) 
set arr2=(`sed 's/\([0-9.]*\):[0-9]*/\1/g' config.file`) 

,用這個符號(周圍的括號你可以創建數組,並且可以使用:

echo $arr1[1] 
echo $arr1[2] 
echo $arr1[3] 
echo $arr2[1] 
echo $arr2[2] 
echo $arr2[3] 

(假設樣本數據)。注意到這部分的手冊頁標記了帶'(+)'的語法,這可能意味着'擴展到標準C shell',所以這是否適用於您可能取決於您的環境。

+0

感謝隊友,這個工作:) – Ebbcom 2009-11-22 02:37:08

+0

+1的鏈接。 – 2011-02-10 04:45:42