用Sed删除字符串的部分

nev*_*int 11 unix linux bash sed

我有这样的数据行:

sp_A0A342_ATPB_COFAR_6_+_contigs_full.fasta
sp_A0A342_ATPB_COFAR_9_-_contigs_full.fasta
sp_A0A373_RK16_COFAR_10_-_contigs_full.fasta
sp_A0A373_RK16_COFAR_8_+_contigs_full.fasta
sp_A0A4W3_SPEA_GEOSL_15_-_contigs_full.fasta
Run Code Online (Sandbox Code Playgroud)

如何sed为每行删除第4列(_分隔)后的部分字符串.最后屈服:

sp_A0A342_ATPB_COFAR
sp_A0A342_ATPB_COFAR
sp_A0A373_RK16_COFAR
sp_A0A373_RK16_COFAR
sp_A0A4W3_SPEA_GEOSL
Run Code Online (Sandbox Code Playgroud)

Mat*_*hen 27

cut 是更合适的.

cut -d_ -f 1-4 old_file
Run Code Online (Sandbox Code Playgroud)

这只是意味着使用_作为分隔符,并保留字段1-4.

如果你坚持sed:

sed 's/\(_[^_]*\)\{4\}$//'
Run Code Online (Sandbox Code Playgroud)

这个左侧正好匹配一组的四个重复,由一个下划线后跟0个或多个非下划线组成.在那之后,我们必须在最后一行.这一切都没有被替换.