Como copiar saídas regex de várias linhas na área de transferência usando o Notepad ++

2

Eu tenho um arquivo fasta contendo sequências de genoma de vários vírus.

Exemplo:

>gi_138375030_Human_papillomavirus
GAAAGTTTCAATCATACTTTATTATATTGGGAGTAAAAAAAA...

>gi_94481944_Human_herpesvirus_3
GGCCCAGCCCTCTCGCGGCCCCCTCGAGAGAGAAAAAAA...

Quero extrair apenas as entradas do vírus do herpes, incluindo a sequência real, que é (neste arquivo) sempre a linha que segue a descrição.

O regex a seguir funciona:

>.*herpes.*\n.*\n

Ele seleciona a descrição e as linhas de sequência.

Encontrei perguntas semelhantes, mas todas fazem uso da função "linha de favoritos": exporte todas as correspondências de expressões regulares no Textpad ou Notepad ++ como uma lista

No entanto, isso marca apenas a primeira linha da saída regex, portanto, não consigo usar as soluções descritas. Se eu usar "encontrar tudo no documento atual", ele também listará apenas as primeiras linhas.

Tudo o que eu quero fazer é copiar a saída do regex para um novo arquivo. É especialmente frustrante, pois encontra pouco mais de cem entradas, um pouco acima da margem sob a qual eu estaria disposto a fazê-lo manualmente.

Eu preferiria uma solução no sistema operacional Windows.

moomox
fonte
Abrir o arquivo no Excel e filtrar pode haver uma solução alternativa.
Máximo Juhász

Respostas:

2

Você pode fazer uma cópia do arquivo e, na cópia, pesquisar e substituir a negação do que deseja:

(?!>.*herpes.*)^(>.*\R)([ATGC]+\R)

O acima irá (ou deveria) encontrar linhas emparelhadas que não têm herpes . Junte isso a um campo de substituição em branco, e você terminará com um arquivo que possui apenas o que está procurando.

Yorik
fonte
É brilhante, no entanto, você perdeu pontos no final de uma segunda linha ^ (?!>. * Herpes. *). * \ R [ATGC] + [\.] + \ R +
g2mk 25/11/15
@ g2mk, acredito que OP significa "continuação" adicionando pontos @ eol. «Após a linha inicial (usada para uma descrição única da sequência) está a própria sequência no código padrão de uma letra. Qualquer coisa que não seja um código válido seria ignorado (incluindo espaços, tabuladores, asteriscos, etc ...). Originalmente, também era comum finalizar a sequência com um caractere "*" (asterisco) (em analogia ao uso em seqüências formatadas em PIR) e, pelo mesmo motivo, deixar uma linha em branco entre a descrição e a sequência » Formato FASTA
SΛLVΘ
@SalvoF Heh - você está certo :)
g2mk 25/11
2

Você pode tentar combinar a pesquisa RegEx com uma macro (atalhos Npp padrão):

  • Verifique se você tem uma linha vazia no final do arquivo - é útil ao usar a Run macro to end of fileentrada do menu principal.
  • Pesquise ( Ctrl+f) sua sequência >.*herpes.*\n.*\n- não permita que o agrupamento comece pelo arquivo.
  • Mover para o arquivo begin ( Ctrl+Home).
  • Pesquise novamente ( F3).
  • Inicie uma gravação de macro ( Ctrl+Shift+r).
  • Vá para a linha begin ( Home) - você deve estar no início de uma primeira linha de sequência.
  • Linha do marcador ( Ctrl+F2).
  • Mova o cursor para o final da segunda linha ( Downe depois End).
  • Marque a outra linha como favorita ( Ctrl+F2).
  • Pesquise novamente ( F3).
  • Pare a gravação de macro ( Ctrl+Shift+r).

Agora você deve ter uma macro de trabalho. Você pode verificar jogando ( Ctrl+Shift+p). Se algo der errado, você pode desfazer Ctrl+zou recarregar o arquivo do disco (outra entrada do menu principal) e tentar gravar a macro de trabalho novamente.

Então:

  • Execute a macro até o final do arquivo.
  • Agora você pode copiar linhas marcadas ou excluir linhas não marcadas e ...
g2mk
fonte
0

Não é uma solução Npp; no Windows PowerShell:

Select-String "herpes" viruses.fas -context 0, 2 | % { $_.Line ; $_.Context.PostContext } | clip

Versão de lote portátil:

@echo off
powershell "$what  = Read-Host String to search      ; "^
           "$where = Read-Host In which file         ; "^
           "Select-String $what $where -context 0, 2 | "^
           "%% { $_.Line ; $_.Context.PostContext }  | "^
           "clip"

Salve-o com uma .batextensão (por exemplo, "clipvir.bat") na mesma pasta em que você tem .fasarquivos. Você pode criar um atalho para o script na barra de aplicativos / inicialização rápida ou na área de trabalho.

SΛLVΘ
fonte
0

Eu usei as seguintes soluções:

use regex ">.*herpes.*\n[\nAGCTN]*" in **EditPad lite** and use its "search>copy_matches" option

ou use:

cat virus_all.fasta | pcregrep --buffer-size 1000000 -M ">.*herpes.*\n[\nAGCTN]*" > herpes1.fasta

no shell bash

a regex funciona mesmo que a sequência siga o cabeçalho em várias linhas. No segundo exemplo, você acaba com um novo arquivo.

moomox
fonte