首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pcregrep复制匹配的多行模式?

Pcregrep复制匹配的多行模式?
EN

Stack Overflow用户
提问于 2020-07-26 04:34:39
回答 1查看 46关注 0票数 0

我有一个文本文件,其中包含2行样本DNA序列,使用pcregrep,我希望找到与"CCC“匹配的模式,特别是跨越多行的模式(参见下面test.txt中第1行的末尾到第2行的开头)。

test.txt:

代码语言:javascript
复制
AGAGUGGCAAUAUGCGUAUAACGAUUAUUCUGGUCGCACCCGCCAGAGCAGAAAAUAUUGGGGCAGCGCC
CAUGCUGGGUCGCACAUGGAUCUGGUGAUAUUAUUGAUAAUAUUAAAGUUUUCCCGACAUUGGCUGAAUA

使用命令:

代码语言:javascript
复制
pcregrep -M --color "C[\n]?C[\n]?C" test.txt

返回:

代码语言:javascript
复制
AGAGUGGCAAUAUGCGUAUAACGAUUAUUCUGGUCGCA**CCC**GCCAGAGCAGAAAAUAUUGGGGCAGCG**CC**

**C**CAUGCUGGGUCGCACAUGGAUCUGGUGAUAUUAUUGAUAAUAUUAAAGUUUU**CCC**GACAUUGGCUGAAUA

它似乎正确地突出了第1行中的2C,但是它突出了第2行的第一个C,然后开始完全打印第二行,给我一个C的复制。

我在这里做错了什么,如何避免重复第2行的'C‘?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-05 17:23:55

试着用这个:

代码语言:javascript
复制
pcregrep -M --color "(?<!C)(C\RCC|CC\RC)(?!C)" test.txt

我假设您想要找到确切的3个C,而不是更多,而且超过3个C是可能的。如果这是不可能的,或者您不关心比3C更多的匹配,您可以使用这个更简单的正则表达式:

代码语言:javascript
复制
pcregrep -M --color "C\RCC|CC\RC" test.txt

解释:

代码语言:javascript
复制
(?<!C)   # Negative lookbehind: Don't match if there's a C before the match
(              # One of these:
      C\RCC    #   C + any kind of new line + CC
    | CC\RC    #  CC + any kind of new line + C
)
(?!C)    # Negative lookahead: Don't match it there's a C after the match

参见演示这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63096124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档