जब grep, कम, awk, sed का उपयोग करना है [बंद]


17

मैं लिनक्स की दुनिया में प्रवेश कर रहा हूं और काम पर grepअधिक से अधिक उपयोग कर रहा हूं । ऐसा करने से मुझे पता चल रहा है कि कभी-कभी यह पर्याप्त नहीं होता कि मैं क्या चाहता हूं।

मैं grepकुछ दिनों पहले संघर्ष कर रहा था और मेरा एक सहयोगी जो एक वरिष्ठ लिनक्स व्यवस्थापक है, ने मुझे उपयोग करने के लिए कहा awk। मैं इस बात से स्तब्ध था कि मुझे कितनी जल्दी परिणाम मिला है।

तो मेरा सवाल यह है कि आप एक का उपयोग कब करना चाहते हैं? काम के लिए जाने grepऔर बहुत समय बिताने से पहले मैं अपने आप से क्या सवाल कर सकता हूं , जब मैं इसे awkसमय के साथ और बचा सकता था?


यह एक अच्छा सवाल है लेकिन यह वास्तव में बहुत व्यापक और मुख्य रूप से राय आधारित है। अपने प्रश्न का उत्तर देने के लिए, जाग के विपरीत grep का उपयोग करना वास्तव में इस बात पर निर्भर करता है कि आप awk / sed का उपयोग कितना आरामदायक कर रहे हैं। कुछ कारण हैं कि कोई इसका उपयोग कैसे करेगा, जैसे कि grep की पेशकश की तुलना में अधिक विशिष्ट चीज़ों की तलाश में या यदि आप किसी विशिष्ट स्ट्रिंग (sed का उपयोग करके) के साथ फ़ाइलों को बदलने / संपादित करने का प्रयास कर रहे हैं। लेकिन फिर, सभी awk / sed का उपयोग करने के साथ आपके आराम के स्तर और अनुभव पर निर्भर करता है।
रेकायो

7
किसी फ़ाइल lessको देखने के लिए उपयोग करें । एक फ़ाइल के माध्यम grepसे खोज करने के लिए उपयोग करें । फ़ाइल संपादितsed करने के लिए उपयोग करेंawkओवर का उपयोग करें grepऔर sedजब आप जिस फ़ाइल को संसाधित करना चाहते हैं, उसमें किसी प्रकार की संरचना (जैसे कॉलम) है। का प्रयोग करें sedसे अधिक awkहै जब आप मुख्य रूप से लाइनों (जैसे पाठ के हटाने या जोड़ने लाइनों के रूप में) के साथ सौदा करना चाहते हैं। मुझे यकीन है कि कोई व्यक्ति 20 पृष्ठों का उत्तर लिखेगा जो मेरी तुलना में अधिक पूर्ण है।
सातु कटुरा

हाय सातो, यह लंबाई के बारे में नहीं है, लेकिन क्या कहा जाता है। और आप कुछ पंक्तियाँ बहुत जानकारीपूर्ण हैं। धन्यवाद।
फ्रैंकगुट्री

जवाबों:


25

sedऔर के awkसुपरसेट हैं grep, ऐसी चीजें हैं जो एक या दूसरे के साथ करना आसान है।

grep fooलिखा sed '/foo/!d'या लिखा जा सकता है awk /foo/, लेकिन विचार करें:

grep -i foosed '/[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/ pcregrepperl-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कार्यान्वयन ऐसे हैं जो बहुत तेज़ हैं, लेकिन उदाहरण के लिए वे मल्टीबाइट वर्णों का समर्थन नहीं करते हैं, इसलिए केवल बहु-बाइट स्थानों में यूएस-अंग्रेज़ी पाठ पर सही ढंग से काम कर सकते हैं। या वे उपवास कर रहे हैं क्योंकि वे एक छोटी फिक्स्ड-लंबाई बफर पर काम करते हैं और इस तरह मनमाने इनपुट पर काम नहीं कर सकते हैं ...


बहुत बढ़िया जवाब! क्या आप उपकरणों की दक्षता के बारे में जानते हैं? मैं ओपी के बयान के बारे में उलझन में हूं, जो इससे awkबहुत तेज है grep
pfnuesel

@pfnuesel, यह बहुत कार्यान्वयन पर और उपयोग पैटर्न पर निर्भर करता है। उदाहरण के लिए, mawkबहुत कुशल होने के लिए जाना जाता है (लेकिन मल्टीबाइट वर्णों का समर्थन नहीं करता है जो इस कारण का हिस्सा है कि यह कुछ अन्य उपकरणों की तुलना में अधिक कुशल है)
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.