Bash 使用Sed编辑配置文件中的行

Bash 使用Sed编辑配置文件中的行,bash,sed,Bash,Sed,我相信这很简单,但我一直有一些问题 我试图创建一个bash脚本,根据传递给它的参数更新配置文件中的一行 配置文件如下所示: //globalConfig.php 'General' => array( 'env_name' => 'Global', 'project_name' => 'ProjectName', 'version' => 'x.x.x' ), 我正在尝试创建一个脚

我相信这很简单,但我一直有一些问题

我试图创建一个bash脚本,根据传递给它的参数更新配置文件中的一行

配置文件如下所示:

//globalConfig.php
'General' => array(
    'env_name' => 'Global',             
    'project_name' => 'ProjectName',    
    'version' => 'x.x.x'                
),
我正在尝试创建一个脚本来更改“version”值。我最后的剧本是这样的,它不起作用:

#!/usr/bin/env bash

sed -i "s/^\'version\'.*/\'version\' => \'$1\'/" globalConfig.php
谢谢你的帮助

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

  • -r
    支持扩展正则表达式,允许使用预期的现代语法定义捕获组
    (\s*'version'\s*=>)

    • \s*
      匹配任何(可能是空的)空白,使匹配更加灵活
  • 替换操作数中的
    \1
    指的是第一个(也是唯一一个)捕获组捕获的内容,因此无需重复
    'version'=>
    部分

  • 请注意,
    $1
    由shell预先展开,以提供替换值,该替换值假定
    $1
    的值不会破坏
    sed
    看到的脚本;具体地说,
    $1
    不能包含(未scaped)
    /
    \
    实例


至于你尝试了什么:

  • “…”
    (双引号shell字符串)内部,
    字符。可以按原样使用-不要
    \
    -将其转义

  • 由于
    ^
    与行的开头匹配,
    'version'
    之后不会立即匹配,因为示例输入中存在中间空白


TFW配置文件实际上是代码……感谢您的帮助和非常清晰的解释。
sed -i -r "s/^(\s*'version'\s*=>).*/\1 '$1'/" globalConfig.php