从 xml 文件中提取文本块

从 xml 文件中提取文本块

我有一个包含以下内容的文件:

<People>
    <Person>
       <Name>Joe Blogs</Name>
       <Address>55 Oxford St</Address>
       ...lots of other properties
    </Person>
    <Person>
       <Name>Jane Pearson</Name>
       <Address>100 Samson St</Address>
       ...lots of other properties
    </Person>
</People>

我唯一可以使用的工具是:awk、sed、grep、pcre_grep

我想提取每个“Person”标签的内容,删除“Name”行,并计算块的md5。

到目前为止我已经尝试过:

awk '/<Person>/,/<\/Person>/{print $0}' input.xml | md5sum

然而,这只返回一个 md5。每个区块都没有一个。

答案1

尝试以下 awk 脚本:

awk '
/<Person>/,/<\/Person>/{
    if (! /<Name>/)
        a=a s $0
    s="\n"
    }
/<\/Person>/{
    system("echo \""a"\" |md5sum - ")
    a=s=""
    }' input.xml

解释:

  • 将标签之间的所有行收集Persona变量中
  • 当满足结束标记时/Person调用系统命令而不是空a变量

答案2

使用 sed 如下

 sed -n  '/^ *<Person> *$/,/^ *<\/Person> *$/{/<Name>/{d};p}' file|md5sum

定位 中的所有行 *<Person> *$/,/^ *<\/Person> *

/<Name>/检查该范围是否具有标签“Name”,然后删除此行。然后打印行范围并通过管道传输到 md5sum

相关内容