Regex 在UNIX中使用SED命令替换整个字符串
我有下面的XMLRegex 在UNIX中使用SED命令替换整个字符串,regex,bash,shell,unix,sed,Regex,Bash,Shell,Unix,Sed,我有下面的XML <?xml version='1.0' encoding='UTF-8'?> <refdataContent xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.orbitz.com/refdataContent file:///opt/orbitz/schemas/content/refdataContent/1/0/refdataConte
<?xml version='1.0' encoding='UTF-8'?>
<refdataContent xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.orbitz.com/refdataContent file:///opt/orbitz/schemas/content/refdataContent/1/0/refdataContent.xsd' xmlns='http://www.orbitz.com/refdataContent'>
<entry key='com.orbitz.reference.api.hotel.HotelPlacementMetagyType.PREMIUMPLACEMENT'><![CDATA[Premium Placement]]></entry>
<entry key='com.orbitz.reference.api.hotel.HotelAvailability.AVAILABLE'><![CDATA[Available]]></entry>
</refdataContent>
需要替换XML头吗
<refdataContent xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://www.orbitz.com/refdataContent file:///opt/orbitz/schemas/content/refdataContent/1/0/refdataContent.xsd'xmlns='http://www.orbitz.com/refdataContent'> </refdataContent>
作为
使用SED命令
帮助?关于sed-i的/refdataContent/properties/g'yourfile.xml呢?很难准确理解您想要做什么,我将尝试几个选项 鉴于以下情况:
$ cat blah.xml
<?xml version='1.0' encoding='UTF-8'?>
<refdataContent xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.orbitz.com/refdataContent file:///opt/orbitz/schemas/content/refdataContent/1/0/refdataContent.xsd' xmlns='http://www.orbitz.com/refdataContent'>
<entry key='com.orbitz.reference.api.hotel.HotelPlacementMetagyType.PREMIUMPLACEMENT'><![CDATA[Premium Placement]]></entry>
<entry key='com.orbitz.reference.api.hotel.HotelAvailability.AVAILABLE'><![CDATA[Available]]></entry>
</refdataContent>
将该行替换为:
要将行换行,请执行以下操作:
你是说改变
<refdataContent xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://www.orbitz.com/refdataContent file:///opt/orbitz/schemas/content/refdataContent/1/0/refdataContent.xsd'xmlns='http://www.orbitz.com/refdataContent'>
为什么要求您使用sed?您应该改用为XML设计的工具。您是说要将refdataContent标记的名称更改为属性吗?如果它能很好地处理整个文本,为什么要使用正则表达式?正则表达式只有在需要某种泛化时才有用,并且只有在某种泛化是可接受的情况下才可能使用。@TomFenech Yes我想使用命令sedI将标记更改为refdatacontent我想用删除整行。有没有办法用正则表达式查找和替换?好吧,我误解了你的问题。然后勾选“华盛顿·盖德斯”的答案。
$ sed 's/.*XMLSchema-instance.*/<properties><\/properties>/g' blah.xml
<?xml version='1.0' encoding='UTF-8'?>
<properties></properties>
<entry key='com.orbitz.reference.api.hotel.HotelPlacementMetagyType.PREMIUMPLACEMENT'><![CDATA[Premium Placement]]></entry>
<entry key='com.orbitz.reference.api.hotel.HotelAvailability.AVAILABLE'><![CDATA[Available]]></entry>
</refdataContent>
$ sed '/XMLSchema-instance/i\
> <properties>' blah.xml | sed '/XMLSchema-instance/a\
> </properties>'
<?xml version='1.0' encoding='UTF-8'?>
<properties><refdataContent xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.orbitz.com/refdataContent file:///opt/orbitz/schemas/content/refdataContent/1/0/refdataContent.xsd' xmlns='http://www.orbitz.com/refdataContent'>
</properties>
<entry key='com.orbitz.reference.api.hotel.HotelPlacementMetagyType.PREMIUMPLACEMENT'><![CDATA[Premium Placement]]></entry>
<entry key='com.orbitz.reference.api.hotel.HotelAvailability.AVAILABLE'><![CDATA[Available]]></entry>
</refdataContent>
<refdataContent xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://www.orbitz.com/refdataContent file:///opt/orbitz/schemas/content/refdataContent/1/0/refdataContent.xsd'xmlns='http://www.orbitz.com/refdataContent'>
/<refdataContent/,/<\/refdataContent/{s/refdataContent.*/properties>/p;d}