Como copiar saídas multi-line-regex na área de transferência usando o Notepad ++

2

Eu tenho um arquivo fasta contendo seqüências genômicas de vários vírus.

Exemplo:

>gi_138375030_Human_papillomavirus
GAAAGTTTCAATCATACTTTATTATATTGGGAGTAAAAAAAA...

>gi_94481944_Human_herpesvirus_3
GGCCCAGCCCTCTCGCGGCCCCCTCGAGAGAGAAAAAAA...

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

O regex seguinte funciona:

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

Seleciona a descrição e as linhas de seqüência.

Eu 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 só marca a primeira linha da saída regex, portanto, não consigo usar as soluções descritas. Se eu usar "localizar todos no documento atual", ele também listará apenas as primeiras linhas.

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

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

    
por moomox 24.11.2015 / 19:50

4 respostas

2

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

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

O acima irá (ou deve) encontrar linhas emparelhadas que não têm herpes . Junte isso com um campo de substituição em branco, você vai acabar com um arquivo que tem apenas o que você está procurando.

    
por 24.11.2015 / 22:24
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. Ela é útil ao usar a entrada do menu principal Run macro to end of file .
  • Pesquisa ( Ctrl+f ) para sua sequência >.*herpes.*\n.*\n - não é permitido agrupar por início de arquivo.
  • Mover para o arquivo begin ( Ctrl+Home ).
  • Pesquise novamente ( F3 ).
  • Iniciar uma gravação de macro ( Ctrl+Shift+r ).
  • Ir para a linha começar ( 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 ( Down e, em seguida, End ).
  • Marque a outra linha ( Ctrl+F2 ).
  • Pesquise novamente ( F3 ).
  • Parar gravação de macro ( Ctrl+Shift+r ).

Agora você deve ter uma macro em funcionamento. Você pode verificá-lo jogando-o ( Ctrl+Shift+p ). Se algo der errado, você poderá desfazer Ctrl+z ou recarregar o arquivo do disco (outra entrada do menu principal) e tentar gravar a macro de trabalho novamente.

Então:

  • Executa a macro no final do arquivo.
  • Agora você pode copiar linhas marcadas como favoritos ou excluir as não mapeadas e ...
por 24.11.2015 / 20:04
0

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

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

Versão em lote mais prática:

@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 a extensão .bat (por exemplo, "clipvir.bat") na mesma pasta em que você tem arquivos .fas . Você pode criar um atalho para o script na sua barra de inicialização rápida / aplicativos ou na sua área de trabalho.

    
por 24.11.2015 / 21:12
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 bash shell

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

    
por 01.12.2015 / 13:54

Tags