2012-12-10 33 views
0

我正在遷移2臺服務器之間的某些數據。數據保存在每臺服務器上的相同文件夾結構中。使用sed替換字符串(fstab)中文本的確切部分

數據移動後,我想更新所有受影響的Linux機器上的fstab文件。我有一個bash腳本,它可以在服務器之間rsyncs數據,然後登錄到列表中的每臺計算機並使用sed使用新的IP地址更新fstab。

sed "s/\(172.16.0.30\)\(.*\)\(${share}\)\(.*\)/172.16.0.35\2\3\4/" 

這在過去行之有效的精絕,但是這一次我遷移具有非常相似的其他幾個人的名稱的文件夾,假設$共享是「家」:

home 
home-old 
home-ancient 

我遇到的問題是,這個正則表達式使用$ share中包含的文本獲取所有的份額,而不僅僅是我想要的。

有沒有辦法調整正則表達式,以便它只會替換我想要的單行上的IP?我已經看了/ b變量,但似乎無法讓它工作,不幸的是,正則表達式通常讓我感到困惑!

+1

如果你告訴我們,一個小的,說6號線,樣本輸入文件和預期產出,這將有助於我們來幫助你。 –

回答

1

\b是一個GNU擴展,在這種情況下將無法工作,因爲它匹配一個字邊界,並且空間和-都在非字組中。它會匹配所有的人。一個簡單的選擇是$share後匹配一個空格(或最終的行)字符,如:

sed "s/\(172.16.0.30\)\(.*\)\(${share}\)\(\(.*\)\|$\)/172.16.0.35\2\3\4/" 
+0

感謝您的幫助,我只是有時間回來,但您的解決方案似乎已經做到了! –