2017-04-06 62 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

感谢您的帮助,以及一个非常明确的解释。 –