我的文件很大,看起来像这样:
ENST00000629289"; transcript_version "2"; exon_number "22"; gene_name "CDK11B"; gene_source "ensembl_havana"; gene_biotype "protein_coding"; transcript_name "CDK11B-208"; transcript_source "ensembl"; transcript_biotype "protein_coding"; exon_id "ENSE00001594002"; exon_version "1"; tag "basic"; transcript_support_level "5";
ENST00000629289"; transcript_version "2"; exon_number "22"; gene_name "CDK11B"; gene_source "ensembl_havana"; gene_biotype "protein_coding"; transcript_name "CDK11B-208"; transcript_source "ensembl"; transcript_biotype "protein_coding"; exon_id "ENSE00001594002"; exon_version "1"; tag "basic"; transcript_support_level "5";
ENST00000629289"; transcript_version "2"; exon_number "22"; gene_name "CDK11B"; gene_source "ensembl_havana"; gene_biotype "protein_coding"; transcript_name "CDK11B-208"; transcript_source "ensembl"; transcript_biotype "protein_coding"; protein_id "ENSP00000485937"; protein_version "1"; tag "basic"; transcript_support_level "5";
我想提取所有唯一以特定字符“ENST”开头的字词 我尝试了以下命令:
sed 's/.*\(ENST.*transcript_version\)/\1/p'
但它打印出所有线条。 有人会帮我这个吗?
答案 0 :(得分:6)
使用grep
和-o
选项仅打印匹配的部分:
grep -Po '^ENST.*transcript_version' file
答案 1 :(得分:1)
使用sed
sed -E 's/^(ENST[[:digit:]]*.*transcript_version).*$/\1/' test11
ENST00000629289"; transcript_version
ENST00000629289"; transcript_version
ENST00000629289"; transcript_version
注意:-E
选项启用扩展正则表达式,如果不支持,则使用-r
选项。此外,我觉得最优雅的解决方案是[ this ]。
答案 2 :(得分:0)
您似乎对sed解决方案感兴趣,或者您可能因某些不寻常的原因需要一个sed解决方案
(否则我推荐一个grep解决方案,例如像这里提供的其他答案。可能不容易检查转录本在那里,但不打印它,我相信你的描述意味着,虽然你的代码是不同的。至少没有greps -P
选项;例如在我的grep中不可用。或者使用perl或awk。)
为了:
-n
.*
\)
[[:alnum:]]*\).*
(上面带\)
)代码:
sed -n 's/.*\(ENST[[:alnum:]]*\).*transcript_version.*/\1/p'
输出:
ENST00000629289
ENST00000629289
ENST00000629289
代码2(包括"成绩单",如果你想要的话):
sed -n 's/.*\(ENST[[:alnum:]]*.*transcript_version\).*/\1/p'
输出2:
ENST00000629289"; transcript_version
ENST00000629289"; transcript_version
ENST00000629289"; transcript_version
我的sed:
GNU sed版本4.2.1