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

时间:2018-07-24 13:44:51

标签: linux sed text-search

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)总是会找到{{ 1}},并且不会默认为undefined。任何帮助都非常感谢。

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

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)

更新的文件

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

1 个答案:

答案 0 :(得分:2)

问题恰恰是脱壳机所说的。无需使用$a,而需要使用s,如下所示:

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