我用下面的sed語法,以更換時區字符串#timezone的sed +替換字符串/字和字符串後忽略空間
實際上sed命令替換它, 但在時區字符串後情況下,我們有一個或更大的空間,然後SED不是取代它
我的問題是我需要的SED語法更改,以取代在這兩種情況下的時區字符串
- 時區字符串後,我們沒有任何空間
時區字符串後,我們一有空間或更多
sed -i '/timezone$/s/timezone/#timezone/' file
我用下面的sed語法,以更換時區字符串#timezone的sed +替換字符串/字和字符串後忽略空間
實際上sed命令替換它, 但在時區字符串後情況下,我們有一個或更大的空間,然後SED不是取代它
我的問題是我需要的SED語法更改,以取代在這兩種情況下的時區字符串
時區字符串後,我們一有空間或更多
sed -i '/timezone$/s/timezone/#timezone/' file
你可以試試:
sed -i.bak -r 's/timezone ?$/#timezone/' file
你需要一個空間後添加?
,這將使空間可選。你也必須添加-r
選項才能讓sed理解擴展正則表達式。
此外,您還沒有指定-i
選項後的備份擴展名。
@David thx condaddict爲偉大的解決方案,任何我不需要備份,因爲它的小變化,但它很好從你學到的新東西 - : ) – david
'?'只有零個空格或一個空格,問題是「一個或多個空格」。順便說一句,可以在GNU sed BREs中使用'\?'('-r'表示GNU sed)。 –
陳述你的兩個案例爲一個,你想要替換'時區'後跟零個或多個空格,當它在行尾。這應該是這樣的:
sed -i 's/timezone *$/#timezone/' file
這應該是一個理想的解決方案,爲您的案件。
sed 's/timezone *$\|timezone/#&/' INPUT_FILE
可以安全地假設'時區'每行只出現一次嗎?正如所寫的,您檢查該行以'timezone'結尾,然後用'#timezone'替換第一個出現的'timezone'。這似乎有點奇怪(但完全有可能)。 –
是的,備註 - 時區是一個函數 - 所以它只出現在每行一個 – david