2011-11-24 102 views
1

我用下面的sed語法,以更換時區字符串#timezone的sed +替換字符串/字和字符串後忽略空間

實際上sed命令替換它, 但在時區字符串後情況下,我們有一個或更大的空間,然後SED不是取代它

我的問題是我需要的SED語法更改,以取代在這兩種情況下的時區字符串

  1. 時區字符串後,我們沒有任何空間
  2. 時區字符串後,我們一有空間或更多

    sed -i '/timezone$/s/timezone/#timezone/' file 
    
+0

可以安全地假設'時區'每行只出現一次嗎?正如所寫的,您檢查該行以'timezone'結尾,然後用'#timezone'替換第一個出現的'timezone'。這似乎有點奇怪(但完全有可能)。 –

+0

是的,備註 - 時區是一個函數 - 所以它只出現在每行一個 – david

回答

3

你可以試試:

sed -i.bak -r 's/timezone ?$/#timezone/' file 

你需要一個空間後添加?,這將使空間可選。你也必須添加-r選項才能讓sed理解擴展正則表達式。

此外,您還沒有指定-i選項後的備份擴展名。

+0

@David thx condaddict爲偉大的解決方案,任何我不需要備份,因爲它的小變化,但它很好從你學到的新東西 - : ) – david

+0

'?'只有零個空格或一個空格,問題是「一個或多個空格」。順便說一句,可以在GNU sed BREs中使用'\?'('-r'表示GNU sed)。 –

0

陳述你的兩個案例爲一個,你想要替換'時區'後跟零個或多個空格,當它在行尾。這應該是這樣的:

sed -i 's/timezone *$/#timezone/' file 
0

這應該是一個理想的解決方案,爲您的案件。

sed 's/timezone *$\|timezone/#&/' INPUT_FILE