如何使用bash从大文件中提取所有以特定字符开头的单词?

use*_*363 0 linux bash sed

我有非常大的文件,看起来像这样:

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";
Run Code Online (Sandbox Code Playgroud)

我想提取所有唯一以特定字符"ENST"开头的单词我尝试了以下命令:

 sed 's/.*\(ENST.*transcript_version\)/\1/p'
Run Code Online (Sandbox Code Playgroud)

但它打印出所有的线条.有人会帮我这个吗?

zhe*_*oli 6

使用grep-o选项仅打印匹配的部分:

grep -Po '^ENST.*transcript_version' file
Run Code Online (Sandbox Code Playgroud)

  • 做得很好.虽然`-P`可以与Linux上的_GNU_` grep`一起使用,但这里不需要它 - 在这种情况下只需要`-o`(这将使命令也适用于BSD/macOS). (2认同)