我想删除文件中每次出现的the>
和 word之间的部分。Bacteria
- 这是输入的示例:
>AADV02000003.105686.107093 Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;
- 结果应如下所示:
>Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;
这是一个 FASTA 文件(仿生信息学中的一种常见文件格式),因此>
始终是该行中的第一个非空白字符,并且该行中只有一个这样的字符。
我正在考虑使用sed
,但我不确定如何设置命令。感谢您的帮助。
假设这是一个 fasta 文件,具有多个标题和序列行,其中标题以 a 开头,
>
并且>
只能作为行的第一个非空白字符出现,您可以执行以下操作:这将查找以 0 个或多个空格开头然后是 a
>
的行,并将从行的开头、到>
和直到第一个空格的所有内容替换为>
,有效地删除第一个空格之前的所有内容。要编辑原始文件而不是将其打印到标准输出,请使用:
这将创建一个名为的文件,该文件
file.fa.bak
将是原始文件的副本。使用
sed
使用Raku(以前称为 Perl_6)
简而言之,使用了 Raku 的
-pe
自动打印逐行标志,以及熟悉的s///
替换运算符。运算符的左半部分搜索 4 个正则表达式原子,零宽度^
的字符串原子开头,反斜杠转义\>
,一次或多次非贪婪的.+?
任意字符,后跟单词Bacteria\;
。非贪婪
.+?
原子被包裹在<(
...)>
中,这是 Raku 的捕获标记。搜索所有四个原子(元素),但仅在<(.+?)>
替换运算符的右半部分捕获替换。最后,替换运算符的右半部分不包含任何字符,这告诉 Raku 进行捕获并将其删除('substitute-with-nothing')。
样本输入:
样本输出:
https://docs.raku.org/language/regexes
https://raku.org/
Gnu sed:
我会改用grep。如果你只想要细菌线,
grep -o 'Bact.*$' file.fa
如果所需的内容可能是第一个空格之后的任何内容,您可以使用(尽管它会包括前导空格):
grep -o ' .*$' file.fa
如果您只想要以“>”开头的行并匹配任何尾随内容,则需要两个步骤:
grep '^>.*$' file.fa | grep -o ' .*$'
命令:
输出
命令
输出