2011-11-01 44 views
0

我正在寫一個腳本,在一段時間更改IP地址,每一次,但由於某種原因,我不能得到這個工作的Bash腳本,有兩個變量的sed不工作

sed "s/$curLine/$nextLine/" </etc/network/interfaces>/etc/network/interfaces.new,即使我更改結束/克,我總是會得到「SED未結束的'S'命令」

這裏是我的變量$ curLine和$ nextLine:

#Find current ip from /etc/network/interfaces 

    curLine=$(sed -n "/address/p" /etc/network/interfaces) 

#Find location of current ip in ips.txt. 

    newLine=$(sed -n "/$curLine/=" ips.txt) 

#Check and set next ip 

    nextIP=$(($newLine+1)) 

    nextLine=$(sed -n "$nextIP,/address/p" ./ips.txt) 

由於某種原因,$ nextLine也給了我兩個IPS我不知道爲什麼,因爲一開始工作得很好。

最後,這是行不通,因爲它應該。

"s/$curLine/$nextLine/" </etc/network/interfaces>/etc/network/interfaces.new 

錯誤消息「sed unterminated`s'command」。如果我用「地址xxx.xxx.xxx.xx」這樣的文本替換$ nextline,它就可以工作了。

我已經閱讀了很多主題,其中解決方案使用了雙引號,但我不知道爲什麼它不起作用跟我來。我也有一本書,是這基本上是相同的我在做什麼,但是當我再次嘗試使用它,它不工作的例子。

謝謝!

回答

0

問題已解決。我只是改變

nextLine=$(sed -n "$nextIP,/address/p" ./ips.txt) 

搜索線,而不是與一個特定的模式行範圍。

nextLine=$(sed -n "$nextIP,/$nextIP" ./ips.txt) 
0

算術語法沒有額外印記:

NUM=1 
OTHERNUM=$((NUM + 1)) 
#  ^^^^^^^^^^^^ 

換言之,也就是說nextIP=$((newLine+1))

+0

我不確定我是否明白你的意思。現在我改變了 'nextIP = $((換行+ 1))'和 'nextLine = $(sed的-n 「$ nextIP,/地址/ P」 ips.txt)' 但仍以下後,S::某些原因,我有兩個IP '回聲「下一行」 $ nextLine' 又一次‘未結束的'S'命令’ – Mare

+0

你確定你可以通過'$ curLine'到'sed'命令沒有任何逃脫?你是否先在命令行上手動嘗試過? –

+0

是的,它似乎工作,至少當我回顯$ curLine時,它給了我一個來自接口的IP地址,它正確的是「地址xxx.x.xx.xxx。我的ips.txt還包括格式爲」xxx地址.. 。「我試圖用ips.txt地址行替換接口地址線 – Mare