删除字符串中的侧翼大写字符

时间:2014-02-04 20:55:42

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

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

输入:

TCGTAAATGGTgggggtcagaccctaaggtttccataaagGCTGGtccaaacgcaacttctaattgaatgataaaatactcatgcatgttGTTCGAtaaaacgtaatatttatggcgtgtctacctaccgttccatcttatcgtttaaactttggtacaattctcagttaagtgacgattgctttggaggaagtaatactgtgatcacaatctatgctgtttgcgttgccAAAAAAtttcaatgtaaaaaaaaaTCGAAAATGGT

期望的输出:

gggggtcagaccctaaggtttccataaagGCTGGtccaaacgcaacttctaattgaatgataaaatactcatgcatgttGTTCGAtaaaacgtaatatttatggcgtgtctacctaccgttccatcttatcgtttaaactttggtacaattctcagttaagtgacgattgctttggaggaagtaatactgtgatcacaatctatgctgtttgcgttgccAAAAAAtttcaatgtaaaaaaaaa

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

谢谢!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

(也可以将它们组合成一个正则表达式,但为了清楚起见,我这样写了它;第一个正则表达式用于引导大写字符,第二个条带用于跟踪大写字符。)

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

答案 2 :(得分:1)

假设

sequence=TCGTAAATGGTgggggtcagaccctaaggtttccataaagGCTGGtccaaacgcaacttctaattgaatgataaaatactcatgcatgttGTTCGAtaaaacgtaatatttatggcgtgtctacctaccgttccatcttatcgtttaaactttggtacaattctcagttaagtgacgattgctttggaggaagtaatactgtgatcacaatctatgctgtttgcgttgccAAAAAAtttcaatgtaaaaaaaaaTCGAAAATGGT

需要扩展模式的纯bash将是

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