linux-sed在同一行中查找替换内容


export const CURRENT_VERSION = '1.0.61 (2018.07.13.22.32) - UAT1'
export const CURRENT_ENVIRONMENT = ENVIRONMENT.TEST1
export const environmentVariable = getEnvironmentFile(CURRENT_ENVIRONMENT)

app.js文件内容如上。

我正在尝试替换文件的内容,在构建期间如下

sh "./envScript 'app.js' 2 "$VERSION_NUMBER ($BUILD_NUMBER) - PROD""

我的envScript.sh如下

#!/bin/bash
if [ $# == 3 ]; then
sed -i '' '/export const CURRENT_VERSION =/d' $1
sed -i '' '/export const CURRENT_ENVIRONMENT =/d' $1
sed -i '' '$a
export var CURRENT_VERSION = '"'$3'" $1
case $2 in
0)
sed -i '' '$a
export var CURRENT_ENVIRONMENT = ENVIRONMENT.UAT1' $1
;;
1)
sed -i '' '$a
export var CURRENT_ENVIRONMENT = ENVIRONMENT.UAT2' $1
;;
2)
sed -i '' '$a
export var CURRENT_ENVIRONMENT = ENVIRONMENT.PROD' $1
;;
esac
else
echo "You need to pass AppConfig.js path as a parameter"
fi

问题,这部分有效,但总是在文件末尾更新CURRENT_VERSION和CURRENT_ENVIRONMENT,因此getEnvironmentFile(CURRENT_ENVIRONMENT)默认为CURRENT_ENVIRONMENT=undefined选项,因为

export const CURRENT_VERSION = '1.0.61 (2018.07.13.22.32) - UAT1'

位于文件末尾。

请求帮助:如何使用sed在文件的同一行进行就地编辑,在这种情况下基本上是查找和替换,这样getEnvironmentFile(CURRENT_ENVIRONMENT)在调用之前总是会找到CURRENT_ENVIRONMENT,而不会默认为未定义。非常感谢您的帮助。

运行脚本之前的原始app.js

export const CURRENT_VERSION = '1.0.61 (2018.07.13.22.32) - UAT1'
export const CURRENT_ENVIRONMENT = ENVIRONMENT.TEST1
export const environmentVariable = getEnvironmentFile(CURRENT_ENVIRONMENT)

当前修改的app.js

在运行命令之后

sh "./envScript '../../App/Config/AppConfig.js' 2 "$VERSION_NUMBER ($BUILD_NUMBER) - PROD""

更新文件

export const environmentVariable = getEnvironmentFile(CURRENT_ENVIRONMENT)
export const CURRENT_VERSION = '1.0.61 (2018.07.13.22.32) - PROD'
export const CURRENT_ENVIRONMENT = ENVIRONMENT.PROD

预期结果

export const CURRENT_VERSION = '1.0.61 (2018.07.13.22.32) - PROD'
export const CURRENT_ENVIRONMENT = ENVIRONMENT.PROD
export const environmentVariable = getEnvironmentFile(CURRENT_ENVIRONMENT)

问题正是shelter所说的。您需要使用s,而不是使用$a,如下所示:

sed '/VERSION/s/UAT1/PROD/;/ENVIRONMENT/s/TEST1/PROD/' app.js

最新更新