2017-04-06 63 views
1

我確定這很簡單,但我一直有一些問題。用Sed編輯配置文件中的行

我想創建一個bash腳本來更新基於傳遞給它的參數的配置文件中的一行。

配置文件看起來是這樣的:

//globalConfig.php 
'General' => array(
    'env_name' => 'Global',    
    'project_name' => 'ProjectName',  
    'version' => 'x.x.x'     
), 

,我試圖創建一個腳本,改變了「版本」值。我已經結束了與腳本,它不工作是這樣的:

#!/usr/bin/env bash 

sed -i "s/^\'version\'.*/\'version\' => \'$1\'/" globalConfig.php 

感謝您的幫助!

+0

TFW配置文件實際上是代碼... –

回答

1

嘗試(使用GNUsed,如暗示您的問題):

sed -i -r "s/^(\s*'version'\s*=>).*/\1 '$1'/" globalConfig.php 
  • -r能夠支持擴展正則表達式,它允許捕獲組(\s*'version'\s*=>)的定義使用預期現代語法。

    • \s*匹配任何(可能爲空)的空白運行,從而實現更靈活的匹配。
  • 在更換操作數\1指的是什麼捕獲的第一(只)捕獲基團,其使得不必重複'version' =>一部分。

  • 注意$1,膨脹前面,供應替代值,其中假定的$1值不斷裂的sed認爲作爲結果的腳本;具體而言,$1不得包含(未轉義的)/\實例。


至於你嘗試過什麼:

  • "..."(雙引號外殼字符串),'字符。可以原樣使用 - 不要\ - 逃避它們。

  • 由於^與該行的開頭匹配,'version'將不會立即匹配,因爲樣本輸入中存在中間空白。

+1

感謝您的幫助,以及一個非常明確的解釋。 –