正则表达式问题 - 猫

时间:2016-01-27 02:41:31

标签: regex perl

给定一个如下所示的输入文件:

>Scaffold1
AACTGTGCCTATTTGGGCATCCGTCAGGAAAATATTGTCGCCCTCGGTGCATAAACCCATCGGCTGACCAAAGGCTGCAAAGCTGCCAGAACCGTTCCTGTTTCCTTCTTCTCCGGTACCAGCAATGACTGTAACAGTGCCGTTTCTGTCAAGGTGCATTACTTGACGCCTTGTCTGGTCGGTGAAAGCTACTTTCCCGTCTGAAAGTGGGGCAACTGCCTGTATACCGGAACTTGCTTGCCCTGCATCAGCCATGGCGTACTCTTTCACCTCCTGATTTGTTATTTTGACTTTGGTGATGCCTTTGTTGTGTGCCATAACAAGATATCCATCGGTAGATAAGCACATGCTTCGAACCTTACCTCATAGCGGTGTAAAATCACAAAACTTAGTGACTGTT
>Scaffold2
CTTTATAGAGTTTATCGATATCATGGCCGTACAAAGAAGCGCTTAATTTCTAAGGTCATCTTAGAAGCTTCGTAAACACACATTAATGTTAATGAGCTTCCTCGCCTGACAGCATCCTCGCTGCAGGACCCAACAGTGGAGGGGAAGCGGCACAGACCTTGAGGTATGGGTGCGTATGGGTGCACAATGACCTAATACGTGAATATTGATCAAATTCTAAAAAGTTACCATGAATTGAGTGTTTATTCGTATAGGGTGTTTCCTCTCAAACACGGCACCGTTATAAAACAAACAATTTCAGTTCAAATAGTTAAAAAGC
>Scaffold3
TGTTGCTTTTTCTCCTTGGTGGATGCTGCAGTTACAGACTTTCTTTTCCGGCAACAATTTAAATAATGTTCTGTGGAAAAAACGACATGTAATTATTTTGATTCGAGGTCAAACGTTGACCCAGTATTTAGTCCAGTATGACTAATTATCAATACTTTAACAAATTTACGTCATTTCTTCATGCGTCTGTCCTGTTATTGTTCATGAATTTCGTCAAAACATTGTCCGCAGACTGCTTG

我希望输出看起来像这样:

Scaffold1        isogroup1
AACTGTGCCTATTTGGGCATCCGTCAGGAAAATATTGTCGCCCTCGGTGCATAAACCCATCGGCTGACCAAAGGCTGCAAAGCTGCCAGAACCGTTCCTGTTTCCTTCTTCTCCGGTACCAGCAATGACTGTAACAGTGCCGTTTCTGTCAAGGTGCATTACTTGACGCCTTGTCTGGTCGGTGAAAGCTACTTTCCCGTCTGAAAGTGGGGCAACTGCCTGTATACCGGAACTTGCTTG
Scaffold2        isogroup2
CTTTATAGAGTTTATCGATATCATGGCCGTACAAAGAAGCGCTTAATTTCTAAGGTCATCTTAGAAGCTTCGTAAACAACACATTAATGTTAATGAGCTTCCTCGCCTGACAGCATCCTCGCTGCAGGACCCAACAGTGGAGGGGAAGCGGCACAGACCTTGAGGTATGGGTGCGTATGGGTGCACAATGACCTAATACGTGAATATTGATCAAATTCTAAAAAGTTACCATGAATTGAGTGTTTATTCGTATAGGGTGTTTCCTCTCAAACACGGCACCGTTATAAAACAAACAATTTCAGTTCAAATAGTTAAAAAGC
Scaffold3        isogroup3
TGTTGCTTTTTCTCCTTGGTGGATGCTGCAGTTACAGACTTTCTTTTCCGGCAACAATTTAAATAATGTTCTGTGGAAAAAACGACATGTAATTATTTTGATTCGAGGTCAAACGTTGACCCAGTATTTAGTCCAGTATGACTAATTATCAATACTTTAACAAATTTACGTCATTTCTTCATGCGTCTGTCCTGTTATTGTTCATGAATTTCGTCAAAACATTGTCCGCAGACTGCTTG

我似乎无法弄清楚正则表达式是否有效。

我试过第一次尝试:

cat test.fasta | perl -pe  's/>Scaffold(\.*).+/Scaffold$1$2\tisogroup$1/' >transcriptome_seq2iso.tab

但这只是输出:

Scaffold        isogroup
AACTGTGCCTATTTGGGCATCCGTCAGGAAAATATTGTCGCCCTCGGTGCATAAACCCATCGGCTGACCAAAGGCTGCAAAGCTGCCAGAACCGTTCCTGTTTCCTTCTTCTCCGGTACCAGCAATGACTGTAACAGTGCCGTTTCTGTCAAGGTGCATTACTTGACGCCTTGTCTGGTCGGTGAAAGCTACTTTCCCGTCTGAAAGTGGGGCAACTGCCTGTATACCGGAACTTGCTTGCCCTGCATCAGCCATGGCGTACTCTTTCACCTCCTGATTTGTTATTTTGACTTTGGTGATGCCTTTGTTGTGTGCCATAA
Scaffold        isogroup
CTTTATAGAGTTTATCGATATCATGGCCGTACAAAGAAGCGCTTAATTTCTAAGGTCATCTTAGAAGCTTCGTAAACACACATTAATGTTAATGAGCTTCCTCGCCTGACAGCATCCTCGCTGCAGGACCCAACAGTGGAGGGGAAGCGGCACAGACCTTGAGGTATGGGTGCGTATGGGTGCACAATGACCTAATACGTGAATATTGATCAAATTCTAAAAAGTTACCATGAATTGAGTGTTTATTCGTATAGGGTGTTTCCTCTCAAACACGGCACCGTTATAAAACAAACAATTTCAGTTCAAATAGTTAAAAAGC
Scaffold        isogroup
TGTTGCTTTTTCTCCTTGGTGGATGCTGCAGTTACAGACTTTCTTTTCCGGCAACAATTTAAATAATGTTCTGTGGAAAAAACGACATGTAATTATTTTGATTCGAGGTCAAACGTTGACCCAGTATTTAGTCCAGTATGACTAATTATCAATACTTTAACAAATTTACGTCATTTCTTCATGCGTCTGTCCTGTTATTGTTCATGAATTTCGTCAAAACATTGTCCGCAGACTGCTTG

接下来我想我可以在(\d+)的位置使用(\.*),因为可以使用字符\d代替0到9之间的任何数字。+表示一个或多个重复。但是输出看起来像:

>Scaffold1
AACTGTGCCTATTTGGGCATCCGTCAGGAAAATATTGTCGCCCTCGGTGCATAAACCCATCGGCTGACCAAAGGCTGCAAAGCTGCCAGAACCGTTCCTGTTTCCTTCTTCTCCGGTACCAGCAATGACTGTAACAGTGCCGTTTCTGTCAAGGTGCTTACTTGACGCCTTGTCTGGTCGGTGAAAGCTACTTTCCCGTCTGAAAGTGGGGCAACTGCCTGTATACCGGAACTTGCTG
>Scaffold2
CTTTATAGAGTTTATCGATATCATGGCCGTACAAAGAAGCGCTTAATTTCTAAGGTCATCTTAGAAGCTTCGTAAACACACATTAATGTTAATGAGCTTCCTCGCCTGACAGCATCCTCGCTGCAGGACCCAACAGTGGAGGGGAAGCGGCACAGACCTTGAGGTATGGGTGCGTATGGGTGCACAATGACCTAATACGTGAATATTGATCAAATTCTAAAAAGTTACCATGAATTGAGTGTTTATTCGTATAGGGTGTTTCCTCTCAAACACGGCACCGTTATAAAACAAACAATTTCAGTTCAAATAGTTAAAAAGC
>Scaffold3
TGTTGCTTTTTCTCCTTGGTGGATGCTGCAGTTACAGACTTTCTTTTCCGGCAACAATTTAAATAATGTTCTGTGGAAAAAACGACATGTAATTATTTTGATTCGAGGTCAAACGTTGACCCAGTATTTAGTCCAGTATGACTAATTATCAATACTTTAACAAATTTACGTCATTTCTTCATGCGTCTGTCCTGTTATTGTTCATGAATTTCGTCAAAACATTGTCCGCAGACTGCTTG

任何人都可以建议为什么这不起作用以及解决方法是什么?

1 个答案:

答案 0 :(得分:1)

第一个问题是\.只匹配句点(.)。你想用它去转义。 \d+也没关系。

第二个问题是.+强制.*匹配的字符少于其他字符。摆脱它。

perl -pe's/^>Scaffold(.*)/Scaffold$1\tisogroup$1/' test.fasta >output.tab