提取标签之间的信息

提取标签之间的信息

我有一个文本文件,以下显示了文件内容的示例:

第1234章 一个新的同源域编码基因与一个被<category="Modifier">肌强直性营养不良</category>不稳定(CTG)n重复序列中断的大CpG岛相关。 <category="SpecificDisease">强直性营养不良</category> ( <category="SpecificDisease">DM</category> ) 与蛋白激酶编码的 3 个非翻译区中的 (CTG) n 三核苷酸重复扩增有关基因DMPK,映射到染色体19q13。 3.迄今为止,对该基因在患者组织中表达的表征已经产生了关于 DMPK mRNA 稳态水平变化以及存在扩增时最终 DMPK 蛋白水平变化的相互矛盾的数据。 19号染色体的<category="Modifier">DM</category>区域基因丰富,重复扩增可能导致附近许多转录单位功能障碍,这可能是染色质破坏的结果。 。我们搜索了与 DMPK 3 端 CpG 岛相关的基因。该区域的测序表明该岛延伸超过 3 . 5 kb 并被 (CTG) n 重复中断。比较人和小鼠重复序列下游(着丝粒)的基因组序列,确定了显着同源性的区域。这些对应于预测编码同源域蛋白的基因的外显子。 RT-PCR分析表明,这个基因,我们称之为<category="Modifier">DM</category>基因座相关同源域蛋白( DMAHP ) ,在许多人体组织中表达,包括骨骼肌、心脏和大脑。 。

我需要提取标签之间的内容:例如,

<category="SpecificDisease">Myotonic dystrophy</category>

我需要提取“强直性肌营养不良”并写入一个新的文本文件。

答案1

您可以使用grep查找标签之间的文本然后sed删除标签本身来执行此操作:

$ grep -oP '<category.+?>.*?</category>' file.txt | sed 's/<.*>\(.*\)<.*>/\1/'
myotonic dystrophy
Myotonic dystrophy
DM
DM
DM

解释

  • grep -oP-P启用聚合酶链式反应forgrep-o使其仅打印匹配的字符串。
  • '<category.+?>.*?</category>':这告诉grep我们搜索开始和结束category标签之间的所有内容。
  • sed 's/<.*>\(.*\)<.*>/\1/':上面的输出grep通过管道传输到sed它,通过用其内容替换它们来简单地删除标签(这里\1是因为使用括号来捕获它们)。

答案2

这可以通过PCRE来完成,到目前为止我已经尝试过了..但还没有完全理解..

这是我尝试过并正在工作的示例:

grep -oP '(?:<category=[A-Za-z\"\s]*>)[A-Za-z\s]+(?:<\/category>)' input|\
awk -F">" '{split($2,a,"<"); print a[1]}'

相关内容