在匹配开始标签+XML中的任何内容后搜索并替换结束标签

在匹配开始标签+XML中的任何内容后搜索并替换结束标签

我正在尝试在 WordPress 导出 XML 文件中找到搜索和替换的解决方案,该解决方案将:

  1. 查找字符串

    <content:encoded><![CDATA[HERE GOES ANY POSSIBLE POSTS TEXT including HTML tags]]></wp:meta_value>
    
  2. 将结束标签替换</wp:meta_value></content:encoded>

问题是 XML 文件有许多其他结束</wp:meta_value>标记 - 不仅仅是用于开始<content:encoded>

我搜索的任何 sed 解决方案都没有帮助。任何 bash 命令都可以吗?

PS:我的目标是将自定义字段转换为默认的 WP 内容标签。我需要更改的原始代码如下:

    <wp:postmeta>
        <wp:meta_key><![CDATA[page_content_0_text]]></wp:meta_key>
        <wp:meta_value><![CDATA[POST CONTENT GOES HERE]]></wp:meta_value>
    </wp:postmeta>

我需要:

<content:encoded><![CDATA[POST CONTENT GOES HERE]]></content:encoded>

<content:encoded>XML 中的每个帖子都是唯一的,但<wp:postmeta>并非如此。

答案1

我们将利用一个部分的属性CDATA,即它不能]]>包含其中的子字符串:

perl -0777 -pe '
  s{
    <content:encoded>
    <!\[CDATA\[.*?]]> \K
    </wp:meta_value>
  }[</content:encoded>]xgs;
' your_file.input

相关内容