【问题标题】:linux sed find replace content on the same linelinux sed 查找替换同一行的内容
【发布时间】:2019-01-01 04:07:22
【问题描述】:
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)

【问题讨论】:

  • 想要的输出到底是什么?
  • 并显示对脚本的典型调用,其值为 $1、$2、$3。祝你好运。
  • 此外,您说“就地编辑”、“查找和替换”,但您的 sed 代码始终附加到文件 $a\... 的末尾。 (这可能有效)。因此,我们需要查看您所需的输出样本。祝你好运。
  • 我的错,已编辑信息
  • 对你的 Q 的更新非常好。但对我来说真的太晚了。如果您仍然遇到问题,请明天 Ping。并阐明如何调用脚本一次,但获得 3 个预期输出。我看到每次调用./envScript 都会附加两行。祝你好运。

标签: linux sed text-search


【解决方案1】:

问题正是 shellter 所说的。而不是使用$a,你需要使用s,像这样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-23
    • 2011-12-19
    • 2016-09-05
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多