2017-11-10 115 views
0

我有一个包含一些DNA序列的文本文件。这是在一条线上,但我想分成多行。如何在regex模式之前和之后的正则表达式搜索后添加换行符返回?

>JH739887TTTACAATGTATAATAGAAACTAAAACTGAAATGTTAATCTTGAAATTTAAGAATCTTCAAAAATGTTTAAGTGGTGATAATCTCCCCAGTGTGAGAAACACACTTGGAAGGAAGTCACAAGTCAAATTTAGATTTGTTGCTTAATAATGGATTTGTAAGTATTATCAAATACTCAAGCACtaaggaaacaggaaaatctgaaatgttCACTTGCTTCTAAACATTTGCAGCCGAGTCCAACTTACACAGGGTAAGATGAGTTTTACAGACAGACACTATTTGTTATTAGGTCAGCTACAGTAAGTGAAAAAACTCACCTCTTTAAGTCTGATAAAGTAGCAGAAagtcatattttaaatatcagtaTAAACAAATGCTCTAAGTTTGGAAATGTTAATCTTGAAAGAACCTTCAAAAACATTTAAGTGCTGGTTATCTCCCCAGTGTGT>JH739882TTTACAATGTATAATAGAAACTAAAACTGAAATGTTAATCTTGAAATTTAAGAATCTTCAAAAATGTTTAAGTGGTGATAATCTCCCCAGTGTGAGAAACACACTTGGAAGGAAGTCACAAGTCAAATTTAGATTTGTTGCTTAATAATGGATTTGTAAGTATTATCAAATACTCAAGCACtaaggaaacaggaaaatctgaaatgttCACTTGCTTCTAAACATTTGCAGCCGAGTCCAACTTACACAGGGTAAGATGAGTTTTACAGACAGACACTATTTGTTATTAGGTCAGCTACAGTAAGTGAAAAAACTCACCTCTTTAAGTCTGATAAAGTAGCAGAAagtcatattttaaatatcagtaTAAACAAATGCTCTAAGTTTGGAAATGTTAATCTTGAAAGAACCTTCAAAAACATTTAAGTGCTGGTTATCTCCCCAGTGTGT 

我想要的文件分开我能看的地方:

grep '>[A-Z]\{2\}[0-9]\{6\}' ~/Desktop/text2.txt 

正规表达式 “> [AZ] {2} [0-9] {6}”寻找模式">JH######

但每当我使用SED命令添加前和正则表达式搜索后回传,这是行不通的:

sed '/>[A-Z]\{2\}[0-9]\{6\}/a/b\ 
\n' ~/Desktop/text2.txt 

这是错误我:

sed: 1: "/>[A-Z]\{2\}[0-9]\{6\}/ ...": command a expects \ followed by text 

下面的命令正在运行,但没有给出预期的结果:

sed '/>[A-Z]\{2\}[0-9]\{6\}/a\ 
\n' ~/Desktop/text2.txt 

这是我期待的结果(t他第一行不应该收到回报,但对于比赛的其余部分应之前和之后,该行返回¬这里包括为清楚起见)有一个行返回:

>JH739887¬ 
TTTACAATGTATAATAGAAACTAAAACTGAAATGTTAATCTTGAAATTTAAGAATCTTCAAAAATGTTTAAGTGGTGATAATCTCCCCAGTGTGAGAAACACACTTGGAAGGAAGTCACAAGTCAAATTTAGATTTGTTGCTTAATAATGGATTTGTAAGTATTATCAAATACTCAAGCACtaaggaaacaggaaaatctgaaatgttCACTTGCTTCTAAACATTTGCAGCCGAGTCCAACTTACACAGGGTAAGATGAGTTTTACAGACAGACACTATTTGTTATTAGGTCAGCTACAGTAAGTGAAAAAACTCACCTCTTTAAGTCTGATAAAGTAGCAGAAagtcatattttaaatatcagtaTAAACAAATGCTCTAAGTTTGGAAATGTTAATCTTGAAAGAACCTTCAAAAACATTTAAGTGCTGGTTATCTCCCCAGTGTGT¬ 
>JH739882¬ 
TTTACAATGTATAATAGAAACTAAAACTGAAATGTTAATCTTGAAATTTAAGAATCTTCAAAAATGTTTAAGTGGTGATAATCTCCCCAGTGTGAGAAACACACTTGGAAGGAAGTCACAAGTCAAATTTAGATTTGTTGCTTAATAATGGATTTGTAAGTATTATCAAATACTCAAGCACtaaggaaacaggaaaatctgaaatgttCACTTGCTTCTAAACATTTGCAGCCGAGTCCAACTTACACAGGGTAAGATGAGTTTTACAGACAGACACTATTTGTTATTAGGTCAGCTACAGTAAGTGAAAAAACTCACCTCTTTAAGTCTGATAAAGTAGCAGAAagtcatattttaaatatcagtaTAAACAAATGCTCTAAGTTTGGAAATGTTAATCTTGAAAGAACCTTCAAAAACATTTAAGTGCTGGTTATCTCCCCAGTGTGT¬ 

回答

1

试试这个:

sed 's/>[A-Z]\{2\}[0-9]\{6\}/\n&\n/g;s/^\n//' file 
  • s/>[A-Z]\{2\}[0-9]\{6\}/\n&\n/g:前和每一个匹配串后添加换行符
  • s/^\n//:除去换行符在第一行中添加
+0

这是打印的东西,但它不会添加行返回:'n> JH739887nTTTA'。这是我得到的前几个字符的结果 –

+1

你在Mac上? – SLePort

+0

是的,这有什么不同?它仅适用于Linux吗? –

0

我恨SED但它是一个有趣的挑战:

sed -nE ' 
    :loop 
     s/./&/ 
     tcontinue 
     bnext 

    :continue 
     h 
     s/(^>[A-Z]{2}[0-9]{6}).*/\1/ 
     p 

     g 
     s/^>[A-Z]{2}[0-9]{6}// 

     h 
     s/>[A-Z]{2}[0-9]{6}.*// 
     p 

     g 
     s/[^>]+// 
     tloop 
    :next 
' file 

这是这样一个有趣的挑战,理解这个程序就留给读者自己练习。

0

随着GNU的grep,你可以写

grep -oP '>[A-Z]{2}\d{6}|(?<=>.{8})[^>]+' file 

但你可能没有你的Mac上的grep GNU。尝试普通perl

perl -pe 'chomp; s/(>[A-Z]{2}\d{6})([^>]+)/$1\n$2\n/g' file 
相关问题