gpt4 book ai didi

ubuntu - Sed 无法识别带有双引号的正则表达式

转载 作者:行者123 更新时间:2023-12-04 18:44:24 24 4
gpt4 key购买 nike

我正在尝试用当前日期替换以下 list 中的 android:versionName 值:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
coreApp="true"
package="com.btaudio"
android:versionName="0.7-191027"
android:sharedUserId="android.uid.system">

这是我的带有 sed 命令的批处理脚本:
chmod 777 AndroidManifest.xml

test=$(date '+%y%m%d')

sed 's|(?<=-).*?(?="\n)|'"$test"'|g' AndroidManifest.xml

我的想法是捕获“-”和后跟换行符的双引号之间的文本,使用分隔符后变量工作正常。

任何人都可以向我解释为什么 sed 无法识别正则表达式,尽管在 regex101 上它准确地显示了我想要替换的文本( https://regex101.com/r/yHFkrV/1 )。

我已经阅读了有关使用 -e、-E 或 -r para 的信息,但这些都不适合我。我也尝试了一些对表达式的分隔符,但它似乎没有任何效果。

编辑:我在 Ubuntu 16.04.3 LTS 上使用 sed (GNU sed) 4.2.2

最佳答案

您不能在 sed 中使用环视POSIX 正则表达式模式。

改用消费模式并使用 RHS 恢复它们,替换模式(这很容易,因为它们是硬编码字符,您甚至不需要额外的捕获组):

sed -i 's|-[^"]*"$|-'"$test"'"|g' AndroidManifest.xml

online sed demo .

详情
  • -i - 对文件的内联更改
  • s - 替换命令
  • -[^"]*"$ - - , 除 " 之外的任何 0 个或多个字符然后是字符串的结尾
  • -'"$test"'" - - ,然后 $test值,然后是 "
  • g - 多次出现(虽然这里似乎是多余的)
  • 关于ubuntu - Sed 无法识别带有双引号的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58836313/

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