使用Sed在配置文件中编辑行

时间:2017-04-06 01:44:15

标签: bash 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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

尝试(使用 GNU sed,如您的问题所暗示的那样):

sed -i -r "s/^(\s*'version'\s*=>).*/\1 '$1'/" globalConfig.php
  • -r支持扩展正则表达式,允许使用预期的现代语法定义捕获组(\s*'version'\s*=>)

    • \s*匹配任何(可能为空)的空格运行,从而实现更灵活的匹配。
  • 替换操作数中的
  • \1指的是捕获的第一个(也是唯一的)捕获组,这使得不必重复'version' =>部分。

  • 请注意$1 shell 预先扩展,以提供替换值,该值假定{{1}的值1}}不会破坏$1作为结果看到的脚本;具体而言,sed不得包含(未转义)$1/个实例。

至于你的尝试:

  • \内(双引号 shell 字符串),"..."字符。可以按原样使用 - 不要' - 逃避它们。

  • 由于\与行的开头匹配,^之后不会立即匹配,因为您的示例输入中存在插入的空格。