【问题标题】:Removing Parts of String With Sed使用 Sed 删除部分字符串
【发布时间】:2011-03-07 14:45:34
【问题描述】:

我的数据行如下所示:

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

如何使用sed 删除每行第 4 列(_ 分隔)之后的部分字符串。 最终屈服:

sp_A0A342_ATPB_COFAR
sp_A0A342_ATPB_COFAR
sp_A0A373_RK16_COFAR
sp_A0A373_RK16_COFAR
sp_A0A4W3_SPEA_GEOSL

【问题讨论】:

    标签: linux bash unix sed


    【解决方案1】:

    cut 更合适。

    cut -d_ -f 1-4 old_file
    

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

    如果你坚持sed:

    sed 's/\(_[^_]*\)\{4\}$//'
    

    这个左侧正好匹配一个组的四个重复,由一个下划线后跟 0 个或多个非下划线组成。在那之后,我们必须排在最后。这一切都被什么都取代了。

    【讨论】:

      【解决方案2】:
      sed -e 's/\([^_]*\)_\([^_]*\)_\([^_]*\)_\([^_]*\)_.*/\1_\2_\3_\4' infile > outfile
      

      匹配“任意数量的非'_'”,保存\(和\)之间匹配的内容,后跟'_'。这样做 4 次,然后匹配该行其余部分的任何内容(被忽略)。替换为以“_”分隔的每个匹配项。

      【讨论】:

        【解决方案3】:

        这是另一种可能性:

        sed -E -e 's|^([^_]+(_[^_]+){3}).*$|\1|'
        

        其中 -E 与 GNU sed 中的 -r 类似,会打开扩展正则表达式以提高可读性。

        仅仅因为您可以在 sed 中做到这一点,并不意味着您应该。为此,我更喜欢剪裁。

        【讨论】:

          【解决方案4】:

          AWK 喜欢在野外玩耍:

          awk 'BEGIN{FS=OFS="_"}{print $1,$2,$3,$4}' inputfile
          

          或者,更一般地说:

          awk -v count=4 'BEGIN{FS="_"}{for(i=1;i<=count;i++){printf "%s%s",sep,$i;sep=FS};printf "\n"}'
          

          【讨论】:

            【解决方案5】:
            sed -e 's/_[0-9][0-9]*_[+-]_contigs_full.fasta$//g'
            

            但最简单的答案可能更快,而且通常更好。

            【讨论】:

              【解决方案6】:

              是的,剪裁更好,是的,匹配每个背面更容易。

              我终于在每一行的开头找到了一个匹配项:

               sed -r 's/(([^_]*_){3}([^_]*)).*/\1/' oldFile > newFile
              

              【讨论】:

                猜你喜欢
                • 2011-03-26
                • 1970-01-01
                • 2017-05-28
                • 1970-01-01
                • 2020-11-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-04-09
                相关资源
                最近更新 更多