যখন 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
উভয়ই বিআরই / ইআর ম্যাচিংয়ের জন্য লিবিকায় প্রয়োগ করা পসিক্স রেজেক্স ফাংশন ব্যবহার করে ; বিকাশকারীরা সেই লাইব্রেরিটি ব্যবহার করা বেছে নিয়েছিল বলে ইনসফার ব্যতীত আমার সত্যই নকশার বিষয়ে বিশেষভাবে কথা বলা উচিত ছিল না । grep
grep
time grep ... < /dev/null
, যাতে লোকেদের খাওয়ানো ডেটা grep
এবং অন্যান্য বহিরাগত জিনিসগুলির সাথে প্রকৃত সমস্যাটির সংঘাত না ঘটে ।
[0-9]+