我确定这很简单,但我遇到了一些问题。
我尝试创建一个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 :(得分: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 字符串),"..."
字符。可以按原样使用 - 不要'
- 逃避它们。
由于\
与行的开头匹配,^
之后不会立即匹配,因为您的示例输入中存在插入的空格。