从文本文件中删除字符串

时间:2014-10-23 19:06:12

标签: unix vim awk sed

我有一个非常大的文本文件,由10000行组成,如下所示:

Contig9 Pfam    protein_match   57  81  1.9E-6  +   .   Name=PF12874;Note=Zinc-finger of C2H2 type;Target=null 57 81;status=T;ID=match$554_57_81;date=10-10-2014
Contig9 SMART   protein_match   54  88  9.4E-9  +   .   Name=SM00451;Note=U1-like zinc finger;Target=null 54 88;status=T;ID=match$555_54_88;Ontology_term="GO:0003676"

我想从所有行中删除;ID=matchXXXXX部分。

在unix中使用VIM awk或sed会有一个简单的方法吗?

3 个答案:

答案 0 :(得分:2)

您可以使用:%s命令:

:%s/ID=match.\{-};//g

这会删除所有出现的ID=match,后跟任何字符(\{-}以使其不贪婪),然后删除;一无所有(删除它)。

执行后你得到

Contig9 SMART protein_match 54 88 9.4E-9 + . Name=SM00451;Note=U1-like zinc finger;Target=null 54 88;status=T;Ontology_term="GO:0003676"

而不是

Contig9 SMART protein_match 54 88 9.4E-9 + . Name=SM00451;Note=U1-like zinc finger;Target=null 54 88;status=T;ID=match$555_54_88;Ontology_term="GO:0003676"

请注意ID=match$555_54_88;已被删除

答案 1 :(得分:2)

你可以尝试这样:

awk '{sub(";ID=match[^;]+","")}1' input_file

我希望这有帮助!

答案 2 :(得分:1)

sed -i 's/ID=match.*;//' file.txt