gpt4 book ai didi

regex - 如何替换文件中的版本号?

转载 作者:行者123 更新时间:2023-12-02 20:26:14 25 4
gpt4 key购买 nike

我想替换 xml 文件的 pkg-ref 行中的版本号,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<pkg-ref id="com.mycomp.pkg.foo1" version="1.1.15" auth="Root" installKBytes="">#foo1.pkg</pkg-ref>
<pkg-ref id="com.mycomp.pkg.foo2" version="1.1.15" auth="Root" installKBytes="">#foo2.pkg</pkg-ref>

我试过这个:

#!/bin/sh

NEW_VERSION="1.2.0"

sed -ie "s/version=\"*.*.*\"/version=\"$NEW_VERSION\"/" foo.xml

...但它删除了该行其余部分的一部分,并且还替换了只有 2 位数字且我不想要的 xml 版本...给我留下了这个:

<?xml version="1.2.0"?>
<pkg-ref id="com.mycomp.pkg.foo1" version="1.2.0">#foo1.pkg</pkg-ref>
<pkg-ref id="com.mycomp.pkg.foo2" version="1.2.0">#foo2.pkg</pkg-ref>

我的 sed 行应该是什么?

谢谢。

最佳答案

您可以使用带有否定字符类的限制性正则表达式:

sed -ie "s/\(<pkg-ref [^>]*version=\"\)[^\"]*\"/\1$NEW_VERSION\"/" foo.xml

分割:

  • \(捕获组 #1 的开始
    • <pkg-ref□匹配<pkg-ref□从字面上看,表示空格字符
    • [^>]*截至首次收盘>
    • version=\"匹配version="从字面上看(这里可能有回溯)
  • \) CG #1 结束
  • [^\"]*\"匹配第一个双引号(包括第一个双引号)

在替换字符串中\1是对第一个捕获组的反向引用。

关于regex - 如何替换文件中的版本号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49847500/

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