Berikut ini adalah contoh file besar bernama 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
Saya mengalami masalah dalam mengekstrak baris tertentu dari ini menggunakan grep. Saya ingin mengekstrak semua baris yang berjenis "gen" atau jenis "exon", yang ditentukan di kolom ketiga. Saya terkejut saat ini tidak berhasil:
grep 'gene|exon' AT5G60410.gff
Tidak ada hasil yang dikembalikan. Di mana kesalahan saya?
egrep
saja.Jawaban:
Anda harus keluar dari
|
. Yang berikut harus melakukan pekerjaan itu.grep "gene\|exon" AT5G60410.gff
sumber
Secara default, grep memperlakukan karakter khusus sebagai karakter normal kecuali jika karakter tersebut di-escape. Jadi Anda bisa menggunakan yang berikut ini:
grep 'gene\|exon' AT5G60410.gff
Namun, Anda dapat mengubah modenya dengan menggunakan formulir berikut ini untuk melakukan apa yang Anda harapkan:
egrep 'gene|exon' AT5G60410.gff grep -E 'gene|exon' AT5G60410.gff
sumber
Ini adalah cara berbeda dalam memahami beberapa pilihan:
grep -e gene -e exon AT5G60410.gff
yang
-e
pola beralih menspesifikasikan berbeda untuk mencocokkan.sumber
time
perintah untuk mencari tahu.Ini akan berhasil:
grep "gene\|exon" AT5G60410.gff
sumber
Saya menemukan pertanyaan ini saat mencari di Google untuk masalah tertentu yang saya alami melibatkan perintah yang disalurkan ke
grep
perintah yang menggunakan operator pergantian dalam regex, jadi saya pikir saya akan memberikan jawaban yang lebih terspesialisasi.Kesalahan yang saya hadapi ternyata dengan operator pipa sebelumnya (yaitu
|
) dan bukan operator pergantian (yaitu|
identik dengan operator pipa) di grep regex sama sekali. Jawaban bagi saya adalah dengan benar melarikan diri dan mengutip karakter shell khusus yang diperlukan seperti & sebelum mengasumsikan masalahnya ada pada regex grep saya yang melibatkan operator pergantian.Misalnya, perintah yang saya jalankan di mesin lokal saya adalah:
get http://localhost/foobar-& | grep "fizz\|buzz"
Perintah ini menghasilkan kesalahan berikut:
-bash: syntax error near unexpected token `|'
Kesalahan ini diperbaiki dengan mengubah perintah saya menjadi:
get "http://localhost/foobar-&" | grep "fizz\|buzz"
Dengan keluar dari
&
karakter dengan tanda kutip ganda, saya dapat menyelesaikan masalah saya. Jawabannya sama sekali tidak ada hubungannya dengan operasi pergantian.sumber