sed
और के awk
सुपरसेट हैं grep
, ऐसी चीजें हैं जो एक या दूसरे के साथ करना आसान है।
grep foo
लिखा sed '/foo/!d'
या लिखा जा सकता है awk /foo/
, लेकिन विचार करें:
grep -i foo
sed '/[fF][oO][oO]/!d'
जब तक आप GNU जैसे गैर-मानक एक्सटेंशन पर विचार नहीं करना चाहते हैं, तब होना चाहिए sed '/foo/I!d'
। या awk
: awk 'tolower($0) ~ /foo/'
या फिर एक GNU एक्सटेंशन का उपयोग करके awk -v IGNORECASE=1 /foo/
:।
विभिन्न उपकरण अच्छे हैं और अन्य उपकरणों के साथ बोझिल हैं:
ग्रेप
grep
एक सरल उपकरण है लेकिन बहुत विशेष ऑपरेशन की विधियां कि कठिन साथ पुन: पेश करने हैं awk
या sed
:
grep -i
असंवेदनशील मिलान के लिए (ऊपर देखें)
grep -Fe "$string"
निश्चित स्ट्रिंग खोज के लिए ( export string; awk 'index($0, ENVIRON["string"])'
साथ awk
, कोई प्रत्यक्ष समकक्ष नहीं sed
)।
- (गैर मानक)
grep -r
पुनरावर्ती खोज के लिए
- (गैर मानक)
grep -P
/ pcregrep
perl-like regexps के लिए (कुछ sed
कार्यान्वयनों में perl-like regexp समर्थन है, हालांकि सबसे प्रमुख नहीं)
- (गैर मानक)
grep -o
मिलने वाले भाग पर लौटने के लिए (के कई लाइनों awk
या sed
भी ऐसा ही करने के लिए)
- (गैर मानक)
grep -A/B/C
मैच के आसपास संदर्भ लौटाने के लिए (फिर से उसी तरह से sed
या करने के लिए दर्दनाक awk
)
sed
s/foo/bar/
: sed
के s
आदेश सुविधाओं है कि में लागू करने के लिए कड़ी मेहनत कर रहे हैं awk
की तरह:
s/foo\(.*\)bar/\1/g
: कैप्चरिंग (हालांकि GNU awk के लिए एक gensub()
विस्तार है)
s/foo/bar/3
: प्रत्येक पंक्ति पर तीसरी घटना को प्रतिस्थापित करें
- (गैर-मानक): इन-प्लेस फ़ाइल एडिटिंग (हालाँकि यह
awk
अब GNU द्वारा समर्थित है )।
awk
awk
तीनों में सबसे ज्यादा अमीर है।
- संख्या से निपटने के लिए अच्छा है
- कॉलम में स्वरूपित इनपुट से निपटने के लिए अच्छा है।
- विभिन्न स्रोतों से डेटा निकालने और संयोजन के लिए अच्छा है, इसके साहचर्य सरणियों के साथ।
पर्ल
perl
एक व्यावहारिक निष्कर्षण और रिपोर्टिंग उपकरण के रूप में उन सभी का सबसे अच्छा है। यही कारण है कि इसे शुरू में (सभी sed
/ awk
अप्रचलित उपकरण बनाने के लिए) बनाया गया था ।
perl
टेक्स्ट प्रोसेसिंग करने में माहिर होना एक गंभीर लाभ देता है। मैं इस पर कुछ समय बिताने की सलाह दूंगा, sed
उदाहरण के लिए कम सामान्य आदेशों को देखने से पहले भी ।
प्रदर्शन
अंगूठे के एक नियम के रूप में, उपकरण जितना अधिक विशिष्ट है, यह कार्य में सबसे कुशल है। लेकिन यह भी बहुत हद तक कार्यान्वयन पर निर्भर करता है, कार्य और कुछ अन्य कारकों और प्रदर्शन में व्यापार-बंद हो सकते हैं जिन्हें खाते में लेने की आवश्यकता हो सकती है।
उदाहरण के लिए, कुछ grep
या sed
कार्यान्वयन ऐसे हैं जो बहुत तेज़ हैं, लेकिन उदाहरण के लिए वे मल्टीबाइट वर्णों का समर्थन नहीं करते हैं, इसलिए केवल बहु-बाइट स्थानों में यूएस-अंग्रेज़ी पाठ पर सही ढंग से काम कर सकते हैं। या वे उपवास कर रहे हैं क्योंकि वे एक छोटी फिक्स्ड-लंबाई बफर पर काम करते हैं और इस तरह मनमाने इनपुट पर काम नहीं कर सकते हैं ...