我有一个包含多行的文件,如下所示:
NODE_1_length Prodigal:2.6 CDS 11 274 . + 0 ID=PROKKA_00001;inference=ab initio prediction:Prodigal:2.6;locus_tag=PROKKA_00001;product=hypothetical protein
我想提取ID = PROKKA_ [任何数字]和'product ='之后的所有内容,以获得如下输出:
ID=PROKKA_00001 product=hypothetical protein
我在使用sed方面不是很熟练,因此我尝试调整一些在这里和周围发现的解决方案,但没有成功。如果解决方案分两个步骤(一个用于ID,一个用于产品),也可以,那么我可以将两个结果合并到一个文件中。
如果能提供所用正则表达式的解释,我将不胜感激。
到目前为止,我已尝试将问题一分为二(从ID开始)并尝试:
grep -o 'ID=PROKKA_[0-9]{1,5}*'
sed 's/^ID=PROKKA[0-9]*;//g/
grep -Po 'ID="K[^"]*'
但是它们当然都没有起作用。 感谢您的帮助!
答案 0 :(得分:2)
您可以使用grep -oE
:
grep -oE 'ID=PROKKA_[0-9]+|product=[^;:]+' file
ID=PROKKA_00001
product=hypothetical protein
如果要在同一行中显示结果,请使用grep + paste
:
grep -oE 'ID=PROKKA_[0-9]+|product=[^;:]+' file | paste -s