我的文件中有一系列标题,其名称如下:
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:]]
不起作用,我怎样才能获得确切的名称而不是同义词?
谢谢
答案1
如果您知道文本后面没有空格,那就grep ">scaffold_3$"
对了。
或者更确切地说,使用单引号,因为$
在双引号内是特殊的,并且如果您也想锁定行的开头,则添加^
或使用grep -x
.所以grep '^>scaffold_3$'
或者grep -x '>scaffold_3'
(-x
是--line-regexp
:强制 PATTERN 仅匹配整行)
如果行尾可以有空格并且想忽略任何空格,那么
grep -e '>scaffold_3[[:space:]]*$'
将匹配字符串和行尾之间任意数量的可选空格。 (并且也会接受匹配,无论它在行中的哪个位置开始。)
请注意,如果文件可以具有 Windows 样式的 CRLF 行结尾,那么>scaffold_3$
将不是这样做,最后的 CR 将与模式不匹配。
答案2
如果我理解正确,您只想在文件的第一个条目中得到结果。
您可以 grep 查找该字符串的精确匹配
grep -w ">scaffold_3" file.fasta