2012-06-06 16 views
2

我有一個帶有模板的輸入文件,如下所示。我想更改版本:使用sed。用sed更改文件中的字符串?

Package: somename 
    Priority: extra 
    Section: checkinstall 
    Maintainer: [email protected] 
    Architecture: i386 
    Version: 3.1.0.2-1 
    Depends: 
    Provides: somename 
    Description: some description 

目前我使用grep -m 1 Version inputfile | sed 's/[:_#a-zA-Z\s"]*//g'獲取當前的版本,我試圖用sed 's/3.1.0.2-1/3.1.0.2/' inputfile

,以取代當前版本但是這似乎並沒有工作,但是當我使用嘗試在命令行回聲它作品。 echo 'Version: 3.0.9.1' | sed 's/3.0.9.1/3.2.9.2/'

Output: Version: 3.2.9.2 

我如何能做到這一點任何幫助,將不勝感激。最好我想更改版本而不在文件中獲取當前版本。

在此先感謝

回答

8

你不需要grep的。

sed -i '/Version/s/3\.1\.0\.2-1/3.1.0.2/' <files> 
2

你有一個錯字,最後點應該是一個破折號,試試這個:

sed 's/3.1.0.2-1/3.1.0.2-2/' 
+0

對不起,錯字是我在我的bash腳本中的錯誤,它是正確的。感謝您指出它。 – ShreyasD

4

sed字面上來源於「流編輯器」的名字 - 你的行爲看是它被設計的方式。當你說:

sed 'some commands' file 

在讀取文件,執行命令,並打印出結果 - 它不保存迴文件(雖然sed有些版本會有一些選項來告訴它這樣做) 。你可能想這樣做:

sed 'some commands' file > newfile 

然後驗證newfile是正確的,然後mv newfile file。如果您完全肯定您的編輯腳本是正確的,並且您可以處理覆蓋文件的錯誤數據(如果不是這樣)的後果,那麼您可以考慮使用就地編輯標誌,但通常更安全到一個臨時文件,所以你可以測試/驗證。

+0

這是我的方式,有沒有更好的方法?我發現 - 我不那麼信任 – Zen