我有一个包含3行的文件,如下所示:
col1 set=SamSNP;ANNOVAR_DATE=2015-04-15;Func.ensGene=exonic;Gene.ensGene=ENSCAFG00000000009.3;ANNOVAR_DATE=2015-04-15;Func.ensGene=exonic;GeneDetail.ensGene=.;ALLELE_END GT:PL
我需要删除从“ANNOVAR_DATE”开始直到第3列中“ANNOVAR_DATE”出现的文本。期望的输出如下所示:
col1 set=SamSNP;ANNOVAR_DATE=2015-04-15;Func.ensGene=exonic;GeneDetail.ensGene=.;ALLELE_END GT:PL
linux中的任何解决方案?
答案 0 :(得分:0)
以下是使用sed
执行此操作的方法sed -e 's/\(.*\)\(ANNOVAR_DATE=[^;]*;\).*ANNOVAR_DATE=*[^;]*;\(.*\)/\1\2\3/' <filename>
这将该线分为4个部分:
a)所有字符,直到ANNOVAR_DATE,
b)ANNOVAR_DATE部分的第一个实例,
c)直到并包括下一个ANNOVAR_DATE实例的所有内容
d)其余部分。
'c'被丢弃,a,b和d被存储和打印。
\(.*\)
存储为\1
\(ANNOVAR_DATE=[^;]*;\)
此部分(包括实际日期和分号)存储为\2
.*ANNOVAR_DATE=*[^;]*;
这将选择所有内容直到下一个ANNOVAR_DATE部分并丢弃它
最后,\(.*\)
将该行的其余部分存储为\3