如何删除linux中列中的特定文本

时间:2015-11-11 17:25:44

标签: linux

我有一个包含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中的任何解决方案?

1 个答案:

答案 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