Bash 使用Sed编辑配置文件中的行
我相信这很简单,但我一直有一些问题 我试图创建一个bash脚本,根据传递给它的参数更新配置文件中的一行 配置文件如下所示:Bash 使用Sed编辑配置文件中的行,bash,sed,Bash,Sed,我相信这很简单,但我一直有一些问题 我试图创建一个bash脚本,根据传递给它的参数更新配置文件中的一行 配置文件如下所示: //globalConfig.php 'General' => array( 'env_name' => 'Global', 'project_name' => 'ProjectName', 'version' => 'x.x.x' ), 我正在尝试创建一个脚
//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
谢谢你的帮助 尝试(使用GNUsed
,正如您的问题所暗示的那样):
支持扩展正则表达式,允许使用预期的现代语法定义捕获组-r
(\s*'version'\s*=>)
匹配任何(可能是空的)空白,使匹配更加灵活\s*
- 替换操作数中的
指的是第一个(也是唯一一个)捕获组捕获的内容,因此无需重复\1
部分'version'=>
- 请注意,
由shell预先展开,以提供替换值,该替换值假定$1
的值不会破坏$1
看到的脚本;具体地说,sed
不能包含(未scaped)$1
和/
实例\
至于你尝试了什么:
- 在
(双引号shell字符串)内部,“…”
字符。可以按原样使用-不要“
-将其转义\
- 由于
与行的开头匹配,^
之后不会立即匹配,因为示例输入中存在中间空白'version'
sed -i -r "s/^(\s*'version'\s*=>).*/\1 '$1'/" globalConfig.php