当 Gitlab CI 中的 运行 时,sed 失败并出现错误“\1 not defined in the RE”
sed fails with error "\1 not defined in the RE" when running in Gitlab CI
我正在尝试在 Gitlab CI 作业期间使用 sed
从变量更新文件的内容。该变量来自前一阶段的工件 version
。如果简化,我的工作看起来像这样:
build-android-dev:
stage: build
dependencies:
- version
only:
- mybranch
before_script:
- PUBSPEC_VERSION="`cat app-pubspec-version`"
- echo "Pubspec version - $PUBSPEC_VERSION"
script:
- >
sed -i -E "s/^(version: )(.+)$/${PUBSPEC_VERSION}/g" pubspec.yaml
- cat pubspec.yaml | grep version
interruptible: true
tags:
- macmini-flutter
不幸的是,作业失败并显示以下错误消息:
$ sed -i -E "s/^(version: )(.+)$/${PUBSPEC_VERSION}/g" pubspec.yaml
sed: 1: "s/^(version: )(.+)$/ ...": not defined in the RE
Cleaning up project directory and file based variables
00:00
ERROR: Job failed: exit status 1
PUBSPEC_VERSION
来自工件的如下:
$ echo "Pubspec version - $PUBSPEC_VERSION"
Pubspec version - 4.0.0+2
我可以在我的本地 Ubuntu (Linux) 机器上执行命令,没有任何问题:
$ export PUBSPEC_VERSION=4.0.0+2
$ sed -i -E "s/^(version: )(.+)$/${PUBSPEC_VERSION}/g" pubspec.yaml
$ cat pubspec.yaml | grep version
version: 4.0.0+2
启动Gitlab Runner的远程机器是MacOS。不确定是否重要。
如您所见,我也在 CI 配置中使用了折叠样式,例如 以避免不正确的冒号解释。
我用谷歌搜索 solutions 来解决这个问题,但似乎我不需要在我的正则表达式中转义(虽然我也试过)组括号,因为我使用扩展的正则表达式。
所以我坚持了下来...
P.S。我无法访问远程 MacOS 的 shell。
is MacOS.
-i
采用后缀参数,因此 -E
是要创建的备份后缀。您想要:
- sed -i '' -E 's/...'
我正在尝试在 Gitlab CI 作业期间使用 sed
从变量更新文件的内容。该变量来自前一阶段的工件 version
。如果简化,我的工作看起来像这样:
build-android-dev:
stage: build
dependencies:
- version
only:
- mybranch
before_script:
- PUBSPEC_VERSION="`cat app-pubspec-version`"
- echo "Pubspec version - $PUBSPEC_VERSION"
script:
- >
sed -i -E "s/^(version: )(.+)$/${PUBSPEC_VERSION}/g" pubspec.yaml
- cat pubspec.yaml | grep version
interruptible: true
tags:
- macmini-flutter
不幸的是,作业失败并显示以下错误消息:
$ sed -i -E "s/^(version: )(.+)$/${PUBSPEC_VERSION}/g" pubspec.yaml
sed: 1: "s/^(version: )(.+)$/ ...": not defined in the RE
Cleaning up project directory and file based variables
00:00
ERROR: Job failed: exit status 1
PUBSPEC_VERSION
来自工件的如下:
$ echo "Pubspec version - $PUBSPEC_VERSION"
Pubspec version - 4.0.0+2
我可以在我的本地 Ubuntu (Linux) 机器上执行命令,没有任何问题:
$ export PUBSPEC_VERSION=4.0.0+2
$ sed -i -E "s/^(version: )(.+)$/${PUBSPEC_VERSION}/g" pubspec.yaml
$ cat pubspec.yaml | grep version
version: 4.0.0+2
启动Gitlab Runner的远程机器是MacOS。不确定是否重要。
如您所见,我也在 CI 配置中使用了折叠样式,例如
我用谷歌搜索 solutions 来解决这个问题,但似乎我不需要在我的正则表达式中转义(虽然我也试过)组括号,因为我使用扩展的正则表达式。
所以我坚持了下来...
P.S。我无法访问远程 MacOS 的 shell。
is MacOS.
-i
采用后缀参数,因此 -E
是要创建的备份后缀。您想要:
- sed -i '' -E 's/...'