sed/awk-删除除两个标签和纯文本之外的所有标签

sed/awk-删除除两个标签和纯文本之外的所有标签

这是我的文本文件的示例:

<w:r><w:t>
<w:r w:rsidR="00D171FD">
<w:t></w:t>
</w:r><w:r>
<w:t xml:space="preserve">
This is a sample text </w:t>
</w:r>
<w:highlight w:val="green"/>
<w:r w:rsidR="00D171FD">
<w:color w:val="FF0000"/>
<w:t>
Sample text</w:t>
</w:r>

问题是我需要纯文本以及以下内容标签仅有的:
color w:val="FF0000"
highlight w:val="green"

如何才能做到这一点?

答案1

使用上述命令行,如果您永远不会将这些表达式作为文本,它将发挥作用:

  1. <w:
  2. \>

命令行是:

cat Myfile.txt  | grep -E "color w:val=|highlight w:val=" | sed s/"<w:"/""/g | sed s/"\/>"/""/g

解释:

  • grep -E, --extended-regexp PATTERN
    将 PATTERN 解释为扩展正则表达式
  • |PATTERN 中的逻辑或grep
  • |shell 环境中的管道符号
  • sed s/"<w:"/""/g全局(所有地方)"<w:"用空字符串替换""

注意:可以sed用许多其他方式和更紧凑的方式编写。我认为是这样教学当需要用另一个表达式替代一个表达式时,可以在更广泛的范围内使用。

这是输出:

highlight w:val="green"  
color w:val="FF0000"  

相关内容