首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配3个模式(2个静态模式,一个变量)并更改变量模式

匹配3个模式(2个静态模式,一个变量)并更改变量模式
EN

Unix & Linux用户
提问于 2022-09-01 18:30:34
回答 2查看 36关注 0票数 0

我不知道这是怎么回事,以为我已经安排好了,但没有

我有一个XML文件,其条目如下所示

代码语言:javascript
复制
<compat-change description="Flag {@link android.content.Context#BIND_INCLUDE_CAPABILITIES} is used to pass while-in-use capabilities from client process to bound service. In targetSdkVersion R and above, if client is a TOP activity, when this flag is present, bound service gets all while-in-use capabilities; when this flag is not present, bound service gets no while-in-use capability from client." enableAfterTargetSdk="29" id="136274596" name="PROCESS_CAPABILITY_CHANGE_ID"/>

我需要匹配id和name (总是静态值,并按相同的顺序排列),但是更改Sdk值(它是可变的)。

代码语言:javascript
复制
Sdk="29" id="136274596" name="PROCESS_CAPABILITY"

我确实试过

代码语言:javascript
复制
sed -i '/Sdk=\"[0-9]\+\".*id="143937733".*name="PROCESS_CAPABILITY"/ {s/Sdk=\"[0-9]\+\"/Sdk=\"0\"/1;}'

任何建议都非常感谢

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2022-09-01 20:39:14

使用适当的XML工具(如xmlstarlet )会更好,比如

代码语言:javascript
复制
xmlstarlet ed -u '
  //compat-change[@id="136274596"][starts-with(@name,"PROCESS_CAPABILITY")]/@enableAfterTargetSdk
' -v 0 file.xml

例如。

代码语言:javascript
复制
$ xmlstarlet ed -u '//compat-change[@id="136274596"][starts-with(@name,"PROCESS_CAPABILITY")]/@enableAfterTargetSdk' -v 0 file.xml
<?xml version="1.0"?>
<compat-change description="Flag {@link android.content.Context#BIND_INCLUDE_CAPABILITIES} is used to pass while-in-use capabilities from client process to bound service. In targetSdkVersion R and above, if client is a TOP activity, when this flag is present, bound service gets all while-in-use capabilities; when this flag is not present, bound service gets no while-in-use capability from client." enableAfterTargetSdk="0" id="136274596" name="PROCESS_CAPABILITY_CHANGE_ID"/>

请参阅如何在XMLStarlet中筛选多个属性?

票数 1
EN

Unix & Linux用户

发布于 2022-09-01 21:47:17

使用sed

代码语言:javascript
复制
$ sed -E 's/(Sdk=")[^"]*(" id="136274596" name="PROCESS_CAPABILITY)/\10\2/' input_file
<compat-change description="Flag {@link android.content.Context#BIND_INCLUDE_CAPABILITIES} is used to pass while-in-use capabilities from client process to bound service. In targetSdkVersion R and above, if client is a TOP activity, when this flag is present, bound service gets all while-in-use capabilities; when this flag is not present, bound service gets no while-in-use capability from client." enableAfterTargetSdk="0" id="136274596" name="PROCESS_CAPABILITY_CHANGE_ID"/>
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/715804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档