gpt4 book ai didi

regex - 如何编写 SED 脚本以使用 Regex 根据用户输入替换文件中存在的版本代码

转载 作者:行者123 更新时间:2023-12-04 15:31:49 25 4
gpt4 key购买 nike

我正在从用户输入中获取版本代码,并尝试用新版本代码替换现有版本代码。

包含版本代码的文件名为"Version.gradle",它包含

defaultConfig {
applicationId "com.service_app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
}

我可以从用户那里得到版本,但我不知道如何用现有版本代码替换新版本代码。我正在使用以下模式来获取现有版本代码。

echo "Enter versionCode"
read versionCode
replacement=$(sed 'versionCode=\"(\\d+)\"' Version.gradle)
replacement=${versionCode}
sed "s/PATTERN/$replacement/g" Version.gradle

当前输出:

command : sed e version.sed
Enter versionCode
2
sed: -e expression #1, char 22: expected newer version of sed
sed: can't read Version.gradle: Permission denied

预期输出:

在version.gradle文件中,2应该替换已经存在的版本代码。

最佳答案

首先,确保您对该文件具有写入权限。

然后,你可以使用

sed -i "s/\(versionCode[[:space:]]*\)[0-9]*/\\1${versionCode}/" file

使用 FreeBSD sed:

sed -i '' "s/\(versionCode[[:space:]]*\)[0-9]*/\\1${versionCode}/" file

POSIX BRE 模式和替换细节

  • \(versionCode[[:space:]]*\) - 捕获第 1 组:
    • versionCode - 字面意思
    • [[:space:]]* - 0 个或多个空格
  • [0-9]* - 0 位或更多位
  • \1 - 第 1 组占位符,它将第 1 组中捕获的值放回结果字符串中
  • ${versionCode} - versionCode 内容(注意命令周围的双引号,它们启用变量扩展)。

参见 online sed Linux demo :

test=' defaultConfig {
applicationId "com.service_app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
}'
echo "Enter versionCode"
read versionCode
echo "$versionCode"
sed "s/\(versionCode[[:space:]]*\)[0-9]*/\1${versionCode}/" <<< "$test"

关于regex - 如何编写 SED 脚本以使用 Regex 根据用户输入替换文件中存在的版本代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61134401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com