取消注释XML文件

时间:2020-06-08 05:56:29

标签: xml bash sed adobe

我正在尝试自动化Adobe CC Cleaner工具的创建方式,然后要求管理员取消注释特定行,或者在我们的情况下,取消注释每个产品的所有行,以按照here for macOS的说明进行全面清除。

我想知道如何删除/取消注释<!--,该-->仅在每个产品/行上具有前导空格和 <?xml version="1.0" encoding="UTF-8"?> <Products> <Properties> <Property name="eulaAccepted">1</Property> </Properties> <CreativeCloud> <!--<Product productName="AdobeCreativeCloud" version="2.0"/>--> <!--<Product productName="After Effects" version="17.0.5"/>--> <!--<Product productName="Camera Raw" version="12.2"/>--> <!--<Product productName="STI_Color_MotionPicture_HD" version="1.2"/>--> <!--<Product productName="STI_ColorCommonSet_RGB_HD" version="1.1"/>--> <!--<Product productName="Bridge" version="10.0.3"/>--> <!--<Product productName="Illustrator" version="24.0.3"/>--> <!--<Product productName="CoreSync" version="4.3.34"/>--> <!--<Product productName="InDesign" version="15.0.2"/>--> <!--<Product productName="Photoshop" version="21.1.1"/>--> <!--<Product productName="HD_ASU" version="2.0"/>--> <!--<Product productName="Lightroom" version="3.2"/>--> <!--<Product productName="Media Encoder" version="14.0.4"/>--> <!--<Product productName="CCX Process" version="3.5.1"/>--> <!--<Product productName="Premiere Pro" version="14.0.4"/>--> <!--<Product productName="CC Library" version="3.7.4"/>--> </CreativeCloud> <AAM></AAM> <AdobeIdCredentials></AdobeIdCredentials> <CS6></CS6> <CS5></CS5> <CS4></CS4> <CS3></CS3> </Products> ,而不会影响其他行。

以下是在Adobe CC 2020产品上使用该工具生成cleanup.xml文件之后的输出示例:

h[1:-1,1:-1] = (h[2:,1:-1] + h[:-2,1:-1] + h[1:-1,2:] + h[1:-1,:-2]) / 4

尝试按照herehere提供的说明进行操作,但没有成功。

2 个答案:

答案 0 :(得分:0)

尝试

使用xmlstarlet

xmlstarlet ed -d '//comment()' 

使用sed

sed '/Product/ s#<!--##g;s#-->##g;'

演示:

echo  '<!--<Product productName="AdobeCreativeCloud" version="2.0"/>-->' | sed '/Product/ s#<!--##g;s#-->##g;' 
<Product productName="AdobeCreativeCloud" version="2.0"/>


答案 1 :(得分:0)

假设您的实际输入与示例中显示的一样简单且规则,则可以使用任何sed进行操作:

$ sed 's/<!--\(.*\)-->/\1/' file
    <?xml version="1.0" encoding="UTF-8"?>
<Products>
    <Properties>
        <Property name="eulaAccepted">1</Property>
    </Properties>
    <CreativeCloud>
        <Product productName="AdobeCreativeCloud" version="2.0"/>
        <Product productName="After Effects" version="17.0.5"/>
        <Product productName="Camera Raw" version="12.2"/>
        <Product productName="STI_Color_MotionPicture_HD" version="1.2"/>
        <Product productName="STI_ColorCommonSet_RGB_HD" version="1.1"/>
        <Product productName="Bridge" version="10.0.3"/>
        <Product productName="Illustrator" version="24.0.3"/>
        <Product productName="CoreSync" version="4.3.34"/>
        <Product productName="InDesign" version="15.0.2"/>
        <Product productName="Photoshop" version="21.1.1"/>
        <Product productName="HD_ASU" version="2.0"/>
        <Product productName="Lightroom" version="3.2"/>
        <Product productName="Media Encoder" version="14.0.4"/>
        <Product productName="CCX Process" version="3.5.1"/>
        <Product productName="Premiere Pro" version="14.0.4"/>
        <Product productName="CC Library" version="3.7.4"/>
    </CreativeCloud>
    <AAM></AAM>
    <AdobeIdCredentials></AdobeIdCredentials>
    <CS6></CS6>
    <CS5></CS5>
    <CS4></CS4>
    <CS3></CS3>
</Products>

或者如果您确实只需要将其应用于以空格开头的行,则对ERE使用-E的GNU或OSX / BSD sed:

sed -E 's/^([[:space:]]+)<!--(.*)-->/\1\2/' file

或任何POSIX sed:

sed 's/^\([[:space:]]\{1,\}\)<!--\(.*\)-->/\1\2/' file