awkまたはPerlを使用して文字列から特定のパターンを削除する方法は?

awkまたはPerlを使用して文字列から特定のパターンを削除する方法は?

[gene=xyzI]次の項目が複数ある場合、パターンのみを削除するにはどうすればよいですか?

>lcl|NZ_CP018664.1_gene_628 [gene=mscL] [locus_tag=AUO97_RS03160] [location=complement(694895..695326)]

私の出力は次のとおりです。

>lcl|NZ_CP018664.1_gene_628 [locus_tag=AUO97_RS03160] [location=complement(694895..695326)]

答え1

簡単な交換のため -sed十分です:

sed -E 's/\[gene=[a-z]{3}[A-Z]\] *//' file

出力:

>lcl|NZ_CP018664.1_gene_628 [locus_tag=AUO97_RS03160] [location=complement(694895..695326)]

ファイルの変更「所定の位置に」- 追加された-iオプション:sed -i ....

答え2

そしてGNU awk

$ echo '>lcl|NZ_CP018664.1_gene_628 [gene=mscL] [locus_tag=AUO97_RS03160] [location=complement(694895..695326)]'  | awk '{$0=gensub(/\s*\S+/,"",2)}1'
>lcl|NZ_CP018664.1_gene_628 [locus_tag=AUO97_RS03160] [location=complement(694895..695326)]

これは次の方法で行うこともできますcut

$ echo '>lcl|NZ_CP018664.1_gene_628 [gene=mscL] [locus_tag=AUO97_RS03160] [location=complement(694895..695326)]'  | cut -d' ' -f1,3-
>lcl|NZ_CP018664.1_gene_628 [locus_tag=AUO97_RS03160] [location=complement(694895..695326)]

関連情報