Grep

Grep 沒有用空格檢索字元串

  • November 15, 2021

我在一個文件中有一系列標題,其名稱如下:

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 ">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 將與模式不匹配。

引用自:https://unix.stackexchange.com/questions/677608