Pcregrep 复制匹配的多行模式?
Pcregrep duplicating matching multi-line patterns?
我有一个包含 2 行样本 DNA 序列的文本文件,使用 pcregrep
,我想找到匹配“CCC”的模式,尤其是跨越多行的模式 (请参阅下面 test.txt 中第 1 行的结尾到第 2 行的开头) .
test.txt:
AGAGUGGCAAUAUGCGUAUAACGAUUAUUCUGGUCGCACCCGCCAGAGCAGAAAAUAUUGGGGCAGCGCC
CAUGCUGGGUCGCACAUGGAUCUGGUGAUAUUAUUGAUAAUAUUAAAGUUUUCCCGACAUUGGCUGAAUA
使用命令:
pcregrep -M --color "C[\n]?C[\n]?C" test.txt
Returns:
AGAGUGGCAAUAUGCGUAUAACGAUUAUUCUGGUCGCA**CCC**GCCAGAGCAGAAAAUAUUGGGGCAGCG**CC**
**C**CAUGCUGGGUCGCACAUGGAUCUGGUGAUAUUAUUGAUAAUAUUAAAGUUUU**CCC**GACAUUGGCUGAAUA
它似乎正确地突出显示了第 1 行中的 2 个 C,但是,它突出显示了第 2 行中的第一个 C,然后继续打印出第二行;给我一个 C 的副本。
我在这里做错了什么,如何避免第 2 行中 'C' 的重复?
试试这个:
pcregrep -M --color "(?<!C)(C\RCC|CC\RC)(?!C)" test.txt
我假设您只想找到 3 个 C
且不多于 3 个 C
是可能的。如果那不可能,或者您不关心匹配超过 3C 的内容,您可以改用这个更简单的正则表达式:
pcregrep -M --color "C\RCC|CC\RC" test.txt
解释:
(?<!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
查看演示 here。
我有一个包含 2 行样本 DNA 序列的文本文件,使用 pcregrep
,我想找到匹配“CCC”的模式,尤其是跨越多行的模式 (请参阅下面 test.txt 中第 1 行的结尾到第 2 行的开头) .
test.txt:
AGAGUGGCAAUAUGCGUAUAACGAUUAUUCUGGUCGCACCCGCCAGAGCAGAAAAUAUUGGGGCAGCGCC
CAUGCUGGGUCGCACAUGGAUCUGGUGAUAUUAUUGAUAAUAUUAAAGUUUUCCCGACAUUGGCUGAAUA
使用命令:
pcregrep -M --color "C[\n]?C[\n]?C" test.txt
Returns:
AGAGUGGCAAUAUGCGUAUAACGAUUAUUCUGGUCGCA**CCC**GCCAGAGCAGAAAAUAUUGGGGCAGCG**CC**
**C**CAUGCUGGGUCGCACAUGGAUCUGGUGAUAUUAUUGAUAAUAUUAAAGUUUU**CCC**GACAUUGGCUGAAUA
它似乎正确地突出显示了第 1 行中的 2 个 C,但是,它突出显示了第 2 行中的第一个 C,然后继续打印出第二行;给我一个 C 的副本。
我在这里做错了什么,如何避免第 2 行中 'C' 的重复?
试试这个:
pcregrep -M --color "(?<!C)(C\RCC|CC\RC)(?!C)" test.txt
我假设您只想找到 3 个 C
且不多于 3 个 C
是可能的。如果那不可能,或者您不关心匹配超过 3C 的内容,您可以改用这个更简单的正则表达式:
pcregrep -M --color "C\RCC|CC\RC" test.txt
解释:
(?<!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
查看演示 here。