Grepはスペースを含む文字列を検索しません。

Grepはスペースを含む文字列を検索しません。

私のファイルには、次の一連のヘッダがあります。

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

または、$二重引用符は特別なので、一重引用符を使用し、行の先頭もロックするには、Soまたはを追加または^使用しますgrep -xgrep '^>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

関連情報