"|" ব্যবহার করে গ্রেপিং বিকল্প অপারেটর


96

নিম্নলিখিতটি 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 'gene|exon' AT5G60410.gff

কোনও ফলাফল ফেরত দেওয়া হয় না। আমি কোথায় ভুল করেছি?


8
egrepপরিবর্তে চেষ্টা করুন।
কিথ

পার্ল যে ধরণের রেইগেক্স ব্যবহার করছে তার কাছাকাছি? (এটিই আমি আগে ব্যবহার করেছি)
ম্যাটএলবেক

উত্তর:


136

আপনি অব্যাহতি প্রয়োজন |। নিম্নলিখিতটি কাজটি করা উচিত।

grep "gene\|exon" AT5G60410.gff

হ্যাঁ, ঠিক বুঝতে পেরেছি যে গ্রেপ ব্যবহারের জন্য আমি ভুল রেগেক্স টিউটোরিয়াল অনুসরণ করছি। আমি কোথাও একটি ভাল গ্রেপ খুঁজে পেতে পারে না। এর জন্য ধন্যবাদ!
ম্যাটএলব্যাক

51

ডিফল্টরূপে, গ্রেপ সাধারণত বিশেষ অক্ষরগুলিকে স্বাভাবিক অক্ষর হিসাবে বিবেচনা করে তবে সেগুলি অবতরণ না করা হয়। সুতরাং আপনি নিম্নলিখিত ব্যবহার করতে পারেন:

grep 'gene\|exon' AT5G60410.gff

তবে আপনি যা প্রত্যাশা করছেন তা করতে নিম্নলিখিত ফর্মগুলি ব্যবহার করে আপনি এর মোডটি পরিবর্তন করতে পারেন:

egrep 'gene|exon' AT5G60410.gff
grep -E 'gene|exon' AT5G60410.gff

28

এটি কয়েকটি পছন্দের জন্য গ্রেপিংয়ের একটি ভিন্ন উপায়:

grep -e gene -e exon AT5G60410.gff

-eসুইচ নির্দিষ্ট করে বিভিন্ন নিদর্শন মেলে।


এখন প্রশ্ন দ্রুত কি? কেউ কি জানেন?
স্ট্যালিনকো

4
@ স্টলিংকো: আপনি timeখুঁজে পেতে কমান্ডটি ব্যবহার করতে সক্ষম হবেন ।
নাথান ফেলম্যান

2

এটি কাজ করবে:

grep "gene\|exon" AT5G60410.gff

4
কোনটি মান এই উত্তরটি যা এই আছে stackoverflow.com/a/6775943/3933332 নেই?
রিজায়ার 123

4
@ রিজিয়ার 123 - টাইমস্ট্যাম্পগুলি দেখুন, উভয় একই উত্তর দিয়ে প্রায় একই সময়ে উত্তর দিয়েছিল।
xmnboy

হ্যাঁ, মাত্র এক মিনিট দেরি। তবুও, আমি এমন উত্তর মুছে ফেলব যা উত্তরের উত্তরগুলির সাথে সমান। বিশেষত যদি আমার বেল্টের নিচে 40k খ্যাতি থাকত।
আটটিলা সিসিপাক

0

আমি একটি নির্দিষ্ট সমস্যার জন্য গুগল করার সময় এই প্রশ্নটি পেয়েছি যখন পাইপড কমান্ড জড়িত ছিল এমন একটি grepকমান্ডের সাথে, যা একটি রেইজেক্সে অল্টারনেশন অপারেটর ব্যবহার করে, তাই আমি ভেবেছিলাম যে আমি আমার আরও বিশেষ উত্তরটি অবদান রাখব।

আমি যে ত্রুটিটির মুখোমুখি হয়েছি তা প্রমাণিত হয়েছে পাইপ অপারেটরটির (যেমন |) এবং |গ্রেপ রেজেক্সে একেবারে অল্টারনেশন অপারেটর (যেমন পাইপ অপারেটরের সাথে অভিন্ন) নয়। আমার উত্তরটি ছিল যথাযথভাবে পালানো এবং প্রয়োজনীয় বিশেষ শেল অক্ষর হিসাবে উদ্ধৃতি দেওয়া যেমন & বিষয়টি ধরে নেওয়ার আগে এই বিকল্পটি অপারেটরটির সাথে জড়িত আমার গ্রেপ রেজেক্সের সাথে ছিল।

উদাহরণস্বরূপ, আমি আমার স্থানীয় মেশিনে চালিত কমান্ডটি হ'ল:

get http://localhost/foobar-& | grep "fizz\|buzz"

এই আদেশের ফলে নিম্নলিখিত ত্রুটি হয়েছিল:

-bash: syntax error near unexpected token `|'

এই ত্রুটিটি আমার আদেশটি এতে পরিবর্তন করে সংশোধন করা হয়েছিল:

get "http://localhost/foobar-&" | grep "fizz\|buzz"

&ডাবল উদ্ধৃতি দিয়ে চরিত্রটি থেকে পালিয়ে আমি আমার সমস্যা সমাধান করতে সক্ষম হয়েছি। এই বিকল্পটির সাথে বিকল্পটির কোনও যোগসূত্র ছিল না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.