【问题标题】:Delete flanking uppercase characters in a string删除字符串中的侧翼大写字符
【发布时间】:2014-02-04 20:55:41
【问题描述】:

如何使用 linux 终端删除此字符串(DNA 序列)中开头和结尾的大写字母?

输入:

TCGTAAATGGTgggggtcagaccctaaggtttccataaagGCTGGtccaaacgcaacttctaattgaatgataaaatactcatgcatgttGTTCGAtaaaacgtaatatttatggcgtgtctacctaccgttccatcttatcgtttaaactttggtacaattctcagttaagtgacgattgctttggaggaagtaatactgtgatcacaatctatgctgtttgcgttgccAAAAAAtttcaatgtaaaaaaaaaTCGAAAATGGT

期望的输出:

gggggtcagaccctaaggtttccataaagGCTGGtccaaacgcaacttctaattgaatgataaaatactcatgcatgttGTTCGAtaaaacgtaatatttatggcgtgtctacctaccgttccatcttatcgtttaaactttggtacaattctcagttaagtgacgattgctttggaggaagtaatactgtgatcacaatctatgctgtttgcgttgccAAAAAAtttcaatgtaaaaaaaaa

请注意,字符串中还有其他内部大写字母必须保留。

谢谢!

【问题讨论】:

    标签: bash shell unix command-line-interface bioinformatics


    【解决方案1】:

    使用 sed 你可以做到这一点,假设每个字符串都在一行中:

    sed 's/^[A-Z]*\|[A-Z]*$//g' <<< "$s"
    

    【讨论】:

      【解决方案2】:

      您可以将sed 与正则表达式一起使用:

      sed -e 's/^[A-Z]*//' -e 's/[A-Z]*$//'
      

      (也可以将它们组合成一个正则表达式,但为了清楚起见,我这样写;第一个正则表达式去除前导大写字符,第二个去除尾随大写字符。)

      [me@localhost ~]$ echo 'TCGTAAATGGTgggggtcagaccctaaggtttccataaagGCTGGtccaaacgcaacttctaattgaatgataaaatactcatgcatgttGTTCGAtaaaacgtaatatttatggcgtgtctacctaccgttccatcttatcgtttaaactttggtacaattctcagttaagtgacgattgctttggaggaagtaatactgtgatcacaatctatgctgtttgcgttgccAAAAAAtttcaatgtaaaaaaaaaTCGAAAATGGT' | sed -e 's/^[A-Z]*//' -e 's/[A-Z]*$//'
      gggggtcagaccctaaggtttccataaagGCTGGtccaaacgcaacttctaattgaatgataaaatactcatgcatgttGTTCGAtaaaacgtaatatttatggcgtgtctacctaccgttccatcttatcgtttaaactttggtacaattctcagttaagtgacgattgctttggaggaagtaatactgtgatcacaatctatgctgtttgcgttgccAAAAAAtttcaatgtaaaaaaaaa
      

      【讨论】:

        【解决方案3】:

        假设

        sequence=TCGTAAATGGTgggggtcagaccctaaggtttccataaagGCTGGtccaaacgcaacttctaattgaatgataaaatactcatgcatgttGTTCGAtaaaacgtaatatttatggcgtgtctacctaccgttccatcttatcgtttaaactttggtacaattctcagttaagtgacgattgctttggaggaagtaatactgtgatcacaatctatgctgtttgcgttgccAAAAAAtttcaatgtaaaaaaaaaTCGAAAATGGT
        

        需要扩展模式的纯 bash 将是

        shopt -s extglob
        tmp1=${sequence##*([TCGA])}  # Save the result of stripping the leading capitals
        echo ${tmp1%%*([TCGA])}      # Strip the trailing capitals
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-15
          • 1970-01-01
          • 2017-12-10
          • 2012-05-10
          • 1970-01-01
          • 1970-01-01
          • 2017-08-02
          • 2021-09-25
          相关资源
          最近更新 更多