以下は、AT5G60410.gffという名前の大きなファイルのサンプルです。
Chr5 TAIR10 gene 24294890 24301147 . + . ID=AT5G60410;Note=protein_coding_gene;Name=AT5G60410
Chr5 TAIR10 mRNA 24294890 24301147 . + . ID=AT5G60410.1;Parent=AT5G60410;Name=AT5G60410.1;Index=1
Chr5 TAIR10 protein 24295226 24300671 . + . ID=AT5G60410.1-Protein;Name=AT5G60410.1;Derives_from=AT5G60410.1
Chr5 TAIR10 exon 24294890 24295035 . + . Parent=AT5G60410.1
Chr5 TAIR10 five_prime_UTR 24294890 24295035 . + . Parent=AT5G60410.1
Chr5 TAIR10 exon 24295134 24295249 . + . Parent=AT5G60410.1
Chr5 TAIR10 five_prime_UTR 24295134 24295225 . + . Parent=AT5G60410.1
Chr5 TAIR10 CDS 24295226 24295249 . + 0 Parent=AT5G60410.1,AT5G60410.1-Protein;
Chr5 TAIR10 exon 24295518 24295598 . + . Parent=AT5G60410.1
Grepを使用してこれから特定の行を抽出するのに問題があります。 3番目の列に指定されているタイプ「gene」またはタイプ「exon」の行をすべて抽出したかった。これがうまくいかなかったとき私は驚いた:
grep 'gene|exon' AT5G60410.gff
結果は返されません。どこがおかしいの?
|
をエスケープする必要があります。次の作業を行う必要があります。
grep "gene\|exon" AT5G60410.gff
デフォルトでは、grepはエスケープされない限り、通常の特殊文字を通常の文字として扱います。したがって、次を使用できます。
grep 'gene\|exon' AT5G60410.gff
ただし、次のフォームを使用して、期待どおりにモードを変更できます。
egrep 'gene|exon' AT5G60410.gff
grep -E 'gene|exon' AT5G60410.gff
これは、いくつかの選択肢に対するgrepの異なる方法です。
grep -e gene -e exon AT5G60410.gff
-e
スイッチは、一致するさまざまなパターンを指定します。
これは動作します:
grep "gene\|exon" AT5G60410.gff
正規表現で代替演算子を使用したgrep
コマンドに piped command を使用していた特定の問題をグーグル検索しているときにこの質問を見つけたので、より専門的な回答。
私が直面したエラーは、grep regexの代替演算子(つまり、パイプ演算子と同じ|
)ではなく、前のパイプ演算子(つまり、|
)にあることが判明しました。私にとっての答えは、必要に応じて適切にエスケープして引用することでした &などの特殊なシェル文字 は、代替演算子を含むgrep正規表現に問題があると想定する前に。
たとえば、ローカルマシンで実行したコマンドは次のとおりです。
get http://localhost/foobar-& | grep "fizz\|buzz"
このコマンドにより、次のエラーが発生しました。
-bash: syntax error near unexpected token `|'
このエラーは、コマンドを次のように変更することで修正されました。
get "http://localhost/foobar-&" | grep "fizz\|buzz"
&
文字を二重引用符でエスケープすることで、問題を解決できました。答えは交替操作とはまったく関係ありませんでした。