如何使用 Notepad++ 将多行正则表达式输出复制到剪贴板

如何使用 Notepad++ 将多行正则表达式输出复制到剪贴板

我有一个包含多种病毒基因组序列的 fasta 文件。

例子:

>gi_138375030_Human_papillomavirus
GAAAGTTTCAATCATACTTTATTATATTGGGAGTAAAAAAAA...

>gi_94481944_Human_herpesvirus_3
GGCCCAGCCCTCTCGCGGCCCCCTCGAGAGAGAAAAAAA...

我只想提取疱疹病毒条目,包括实际序列,它(在此文件中)始终是描述后面的行。

以下正则表达式有效:

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

它选择描述和序列行。

我发现了类似的问题,但都使用了“书签行”功能: 将 Textpad 或 Notepad++ 中的所有正则表达式匹配导出为列表

但是,这只会为正则表达式输出的第一行添加书签,因此我无法使用所描述的解决方案。如果我使用“在当前文档中查找所有内容”,它也只会列出前几行。

我只想将正则表达式的输出复制到一个新文件中。这尤其令人沮丧,因为它只找到了一百多个条目,而这刚好超出了我愿意手动完成的界限。

我更喜欢 Windows 操作系统的解决方案。

答案1

您可以复制该文件,然后在副本中搜索并替换否定你想要的:

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

上述方法将(或应该)找到成对的线,没有疱疹将其与空白替换字段结合起来,您将得到一个仅包含您要查找的内容的文件。

答案2

您可以尝试将 RegEx 搜索与宏(标准 Npp 快捷方式)结合起来:

  • 确保文件末尾有一个空行 - 这在使用Run macro to end of file主菜单项时很有用。
  • 搜索(Ctrl+f)您的序列>.*herpes.*\n.*\n- 不允许按文件开头包装。
  • 移至文件开始 ( Ctrl+Home)。
  • 再次搜索 (F3)。
  • 开始宏录制 ( Ctrl+Shift+r)。
  • 转到行首(Home)-您应该位于第一个序列行的开头。
  • 书签行 ( Ctrl+F2)。
  • 将光标移动到第二行末尾(Down然后End)。
  • 将另一行添加为书签 ( Ctrl+F2)。
  • 再次搜索 (F3)。
  • 停止宏录制 ( Ctrl+Shift+r)。

现在您应该有一个可以工作的宏。您可以通过播放它来检查它(Ctrl+Shift+p)。如果出现问题,您可以撤消Ctrl+z或从磁盘重新加载文件(另一个主菜单项)并尝试再次录制可以工作的宏。

然后:

  • 运行宏至文件末尾。
  • 现在您可以复制已加书签的行或删除未加书签的行...

答案3

不是 Npp 解决方案;在 Windows PowerShell 中:

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

更方便的批处理版本:

@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"

.bat将其保存到您有文件的同一文件夹中,并添加扩展名(例如“clipvir.bat”) .fas。您可以在快速启动/应用程序栏或桌面上创建该脚本的快捷方式。

答案4

我使用了以下解决方案:

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

或使用:

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

在 bash shell 中

即使序列在多行中跟在标题后面,正则表达式也能正常工作。在第二个示例中,您最终会得到一个新文件。

相关内容