2017-11-10 179 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 
相關問題