যখন grepবা sedবিকল্প ব্যবহার করা হয় --extended-regexpএবং প্যাটার্ন {1,9999}regexp যে ব্যবহার করা হয় এর একটি অংশ এসব কমান্ড কর্মক্ষমতা কম হয়ে যায়। আরও পরিষ্কার হতে, নীচে কয়েকটি পরীক্ষা প্রয়োগ করা হয়েছে। [১] [২]
- আপেক্ষিক কর্মক্ষমতা
grep -E,egrepএবংsed -Eপ্রায় সমান, তাই শুধুমাত্র পরীক্ষা যে দিয়ে তৈরি হয়েছেgrep -Eপ্রদান করা হয়।
পরীক্ষা 1
$ time grep -E '[0-9]{1,99}' < /dev/null
real 0m0.002s
পরীক্ষা 2
$ time grep -E '[0-9]{1,9999}' < /dev/null
> real 0m0.494s
পরীক্ষা 3
$ সময় গ্রেপ-ই '[0123456789] {1,9999 <' </ দেব / নাল
> আসল 21m43.947s
পরীক্ষা 4
$ time grep -E '[0123456789]+' < /dev/null
$ time grep -E '[0123456789]*' < /dev/null
$ time grep -E '[0123456789]{1,}' < /dev/null
$ time grep -P '[0123456789]{1,9999}' < /dev/null
real 0m0.002s
পারফরম্যান্সের এই তাত্পর্যপূর্ণ পার্থক্যের কারণ কী?
time grep -E '[0-9]{1,99}' </dev/nullবনাম time grep -E '[0-9]{1,9999}' </dev/null। এমনকি কোনও ইনপুট ছাড়াই , দ্বিতীয় কমান্ডটি ধীর গতিতে (16.04 এ)। যেমনটি প্রত্যাশিত, বাদ দেওয়া -Eএবং পালানো {এবং }একই আচরণ করে এবং এর সাথে প্রতিস্থাপন -Eকরা -Pধীর নয় (পিসিআরআই একটি আলাদা ইঞ্জিন)। সবচেয়ে আকর্ষণীয় কত হয় দ্রুত [0-9] চেয়ে ., x, এবং এমনকি [0123456789]। এর মধ্যে যে কোনওটি এবং {1,9999}, grepপ্রচুর পরিমাণে র্যাম গ্রহণ করে; আমি এটি 10 মিনিটেরও বেশি চালিয়ে যেতে সাহস করি না।
{ }এগুলি ' 'উদ্ধৃত হয়েছে ; শেল তাদের অপরিবর্তনীয় পাস grep। যাইহোক, {1,9999}একটি খুব দ্রুত এবং সাধারণ ব্রেস সম্প্রসারণ হবে । শেলটি কেবল এটিতে প্রসারিত হবে 1 9999।
psএবং topযাচাই করার জন্য grepপ্রত্যাশিত যুক্তিগুলি পাস হয়ে গেছে এবং এটি bashপ্রচুর র্যাম এবং সিপিইউ গ্রহণ করে না। আমি প্রত্যাশা করি grepএবং sedউভয়ই বিআরই / ইআর ম্যাচিংয়ের জন্য লিবিকায় প্রয়োগ করা পসিক্স রেজেক্স ফাংশন ব্যবহার করে ; বিকাশকারীরা সেই লাইব্রেরিটি ব্যবহার করা বেছে নিয়েছিল বলে ইনসফার ব্যতীত আমার সত্যই নকশার বিষয়ে বিশেষভাবে কথা বলা উচিত ছিল না । grepgrep
time grep ... < /dev/null, যাতে লোকেদের খাওয়ানো ডেটা grepএবং অন্যান্য বহিরাগত জিনিসগুলির সাথে প্রকৃত সমস্যাটির সংঘাত না ঘটে ।
[0-9]+