私のファイルには、次の一連のヘッダがあります。
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 -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