我有一个文本文件,以下显示了文件内容的示例:
第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]}'