如何在regex模式之前和之后的正则表达式搜索后添加换行符返回?
问题描述:
我有一个包含一些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¬
答
试试这个:
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//
:除去换行符在第一行中添加
答
我恨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
这是这样一个有趣的挑战,理解这个程序就留给读者自己练习。
答
随着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
这是打印的东西,但它不会添加行返回:'n> JH739887nTTTA'。这是我得到的前几个字符的结果 –
你在Mac上? – SLePort
是的,这有什么不同?它仅适用于Linux吗? –