我在一个文件中有一系列标题,其名称如下:
grep ">scaffold_3" DM_v6.1_unanchoredScaffolds.fasta
>scaffold_3
>scaffold_303
>scaffold_31
>scaffold_34
>scaffold_36
>scaffold_37
>scaffold_39
>scaffold_33
>scaffold_300
我只想选择第一个,所以我尝试了:
$ grep ">scaffold_3 " file.fasta
$
$ grep ">scaffold_3[[:blank:]]" file.fasta
$
$ grep ">scaffold_3\t" file.fasta
$
$ grep ">scaffold_3\ " file.fasta
$
$ grep ">scaffold_3 " file.fasta
$
$ grep ">scaffold_3[[:space:]]" file.fasta
$
$ grep ">scaffold_3$" file.fasta
>scaffold_3
鉴于名称后面的字符可能是空格、制表符、换行符(也可能来自 Windows)并且[[:space:]]
不起作用,我如何才能获得确切的名称而不是同义词?
谢谢
如果我没看错,您只想在文件的第一个条目中获得结果。
您可以 grep 以获取该字符串的完全匹配
如果您知道文本后没有空格,那就
grep ">scaffold_3$"
对了。或者更确切地说使用单引号,因为
$
在双引号中是特殊的,如果你也想锁定行首,那么添加^
或使用grep -x
. 所以grep '^>scaffold_3$'
或grep -x '>scaffold_3'
(
-x
是--line-regexp
:强制 PATTERN 只匹配整行)如果您可以在行尾有空格并且想要忽略任何空格,那么
将匹配字符串和行尾之间任意数量的可选空格。(并且无论它从哪里开始,都会接受匹配。)
请注意,如果文件可以具有 Windows 样式的 CRLF 行结尾,则不
>scaffold_3$
会这样做,末尾的 CR 将与模式不匹配。