sed替代分组不起作用

时间:2016-08-05 10:43:35

标签: regex bash sed

我的sed正则表达式有问题。似乎分组不能正常工作,我无法找到原因。

我试过这个以及这个命令的许多衍生物:

sed -er "/s/^(\>[\w\d]+\=[\d]+)_.+\]_([\d])$/\1\2/" test.fa

在这个字符串(文件)上[注意:'>'被这个表格删除并且在每个TRINITY前面,行是交替ID(>TRINITY等等)和序列(大写字母,带星号)换行符( - >此处空格)丢失]:

>TRINITY_DN41792_c0_g3_i1_len=553_path=[700:0-121_707:122-163_706:164-240_694:241-552]_[-1,_700,_707,_706,_694,_-2]_3 KMA
>TRINITY_DN41806_c0_g1_i1_len=213_path=[245:0-129_246:130-147_247:148-212]_[-1,_245,_246,_247,_-2]_1 NSIAP
>TRINITY_DN41806_c0_g1_i1_len=213_path=[245:0-129_246:130-147_247:148-212]_[-1,_245,_246,_247,_-2]_2 TQ*LHIL
>TRINITY_DN41806_c0_g1_i1_len=213_path=[245:0-129_246:130-147_247:148-212]_[-1,_245,_246,_247,_-2]_3 LNS
>TRINITY_DN41788_c0_g1_i1_len=188_path=[208:0-97_209:98-128_210:129-152_211:153-187]_[-1,_208,_209,_210,_211,_-2]_1
*KLCT
>TRINITY_DN41788_c0_g1_i1_len=188_path=[208:0-97_209:98-128_210:129-152_211:153-187]_[-1,_208,_209,_210,_211,_-2]_2 ENCA
>TRINITY_DN41788_c0_g1_i1_len=188_path=[208:0-97_209:98-128_210:129-152_211:153-187]_[-1,_208,_209,_210,_211,_-2]_3 KI
>TRINITY_DN41788_c0_g2_i1_len=167_path=[212:0-97_213:98-128_214:129-152_215:153-166]_[-1,_212,_213,_214,_215,_-2]_1
*KLCT
>TRINITY_DN41788_c0_g2_i1_len=167_path=[212:0-97_213:98-128_214:129-152_215:153-166]_[-1,_212,_213,_214,_215,_-2]_2 ENC
>TRINITY_DN41788_c0_g2_i1_len=167_path=[212:0-97_213:98-128_214:129-152_215:153-166]_[-1,_212,_213,_214,_215,_-2]_3 KIVH
>TRINITY_DN41788_c1_g1_i1_len=183_path=[154:0-182]_[-1,_154,_-2]_1 YGS
>TRINITY_DN41788_c1_g1_i1_len=183_path=[154:0-182]_[-1,_154,_-2]_2 TDPRTVP
>TRINITY_DN41788_c1_g1_i1_len=183_path=[154:0-182]_[-1,_154,_-2]_3 RIPGQF

我想摆脱中间:' _path ='到最后' _'

我缺少什么?

2 个答案:

答案 0 :(得分:0)

好吧,我在Python中尝试过,看起来你的正则表达式是好的,除了最后一个$。 这是我的尝试:

"^(\>\w+\=\d+)_.+\]_(\d)"

我删除了不必要的字符集。 问题是$指定字符串的结尾,这不是真的,因为模式捕获最后一个下划线之后的数字,这不是字符串的结尾。

regexp甚至可以更短:

"([^=]+=\d+).*_(\d)"

[^=]+获取非=

的所有符号

=然后选择=符号

.*_然后是最后一个下划线的所有内容

(\d)然后是数字

答案 1 :(得分:0)

有太多的正则表达集:(试试这个,我删除了第二个分组,如果你只想删除中间部分,你不需要它.B / c只会影响什么是匹配的。我试着使用强引号,而不是双引号,除非有理由不这样做。

sed -r 's/(^>.*=[0-9]+)_.+\]_/\1/' test.fa

从这样的一行: >TRINITY_DN41806_c0_g1_i1_len=213_path=[245:0-129_246:130-147_247:148-212]_[-1,_245,_246,_247,_-2]_1 NSIAP

我明白了: >TRINITY_DN41806_c0_g1_i1_len=2131 NSIAP

如果没有预期输出的示例,我必须相信我正确地阅读了您的解释。

编辑:我没有运气使用\ w和\ d与sed的扩展正则表达式

相关问题