उबंटू grep कमांड गाइड

अवलोकन

लिनक्स वातावरण में बड़ी टेक्स्ट फ़ाइलों या सिस्टम लॉग का विश्लेषण करते समय grep कमांड एक अनिवार्य टूल है। इस लेख में, हम Ubuntu टर्मिनल में grep चलाने, अपनी पसंद की स्ट्रिंग को तेज़ी से खोजने और आउटपुट परिणामों की सटीक व्याख्या करने की महत्वपूर्ण व्यावहारिक तकनीकों के बारे में जानेंगे।

बेसिक स्ट्रिंग सर्च और केस असंवेदनशील विकल्प (-i)

grep कमांड का अभ्यास करने के लिए एक अलग कार्यक्षेत्र (workspace) बनाने और उसमें जाने के लिए mkdir -p ~/grep_demo && cd ~/grep_demo कमांड चलाएँ।

mkdir -p ~/grep_demo && cd ~/grep_demo

सर्च परीक्षण के लिए उदाहरण स्ट्रिंग्स वाली एक टेक्स्ट फ़ाइल बनाने के लिए echo -e 'Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux' > sample.txt कमांड चलाएँ।

echo -e ‘Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux’ > sample.txt

grep कमांड किसी फ़ाइल या टेक्स्ट में किसी विशिष्ट पैटर्न या स्ट्रिंग को खोजती है और मेल खाने वाली पंक्तियों को प्रिंट करती है।
डिफ़ॉल्ट रूप से, यह अंग्रेज़ी के बड़े और छोटे अक्षरों (case sensitivity) में अंतर करती है, इसलिए केवल वही पंक्तियाँ खोजी जाएँगी जो सटीक रूप से Ubuntu से मेल खाती हैं।
⚙️ [प्रमुख विकल्प]

-i : केस संवेदनशीलता को अनदेखा करता है और मेल खाने वाले पैटर्न को खोजता है।
-v : केवल उन पंक्तियों को इनवर्ट (उलटा) करके आउटपुट करता है जो निर्दिष्ट पैटर्न से मेल नहीं खाती हैं।
-n : मेल खाने वाली सामग्री के साथ पंक्ति संख्या (line number) भी प्रदर्शित करता है।
-c : केवल मेल खाने वाली पंक्तियों की कुल संख्या गिनकर आउटपुट करता है।
-r : सबडायरेक्टरीज़ के भीतर सभी फ़ाइलों को पुनरावर्ती (recursively) रूप से खोजता है।
-l : केवल उन फ़ाइलों के नाम सूचीबद्ध करता है जिनमें मेल खाने वाली सामग्री मौजूद है।
-E : विस्तारित रेगुलर एक्सप्रेशन (ERE) का उपयोग करके खोजता है।

grep ‘Ubuntu’ sample.txt

-i विकल्प जोड़ने पर यह केस संवेदनशीलता को अनदेखा करके खोज करता है।
इसलिए, कैपिटल लेटर से शुरू होने वाली Ubuntu और स्मॉल लेटर से शुरू होने वाली ubuntu वाली दोनों पंक्तियाँ आउटपुट में दिखाई देंगी।

grep -i ‘ubuntu’ sample.txt

पंक्ति संख्या प्रदर्शन (-n) और गैर-मेल खाने वाली पंक्तियों की उलटी खोज (-v)

लॉग विश्लेषण अभ्यास के लिए वर्चुअल लॉग डेटा जनरेट करने हेतु echo -e 'INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full' > app.log कमांड चलाएँ।

echo -e ‘INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full’ > app.log

-n विकल्प का उपयोग करने पर सर्च पैटर्न से मेल खाने वाली पंक्तियों के साथ पंक्ति संख्या भी प्रदर्शित होती है।
चूँकि ERROR स्ट्रिंग वाली पंक्ति संख्या और सामग्री एक साथ आउटपुट होती हैं, इसलिए आप समस्या के स्थान की तुरंत पहचान कर सकते हैं।

grep -n ‘ERROR’ app.log

-v विकल्प का उपयोग करने पर केवल वे पंक्तियाँ इनवर्ट होकर आउटपुट होती हैं जो निर्दिष्ट पैटर्न से मेल नहीं खाती हैं।
सामान्य स्थिति दर्शाने वाली INFO प्रविष्टियों को छोड़कर, केवल त्रुटि-संबंधी पंक्तियों को फ़िल्टर करके देखा जा सकता है।

grep -v ‘INFO’ app.log

सबडायरेक्टरी पुनरावर्ती खोज (-r) और केवल फ़ाइल नाम आउटपुट (-l)

पुनरावर्ती खोज (recursive search) के अभ्यास के लिए सब-आर्काइव डायरेक्टरी संरचना बनाने हेतु mkdir -p ~/grep_demo/logs/archive कमांड चलाएँ।

mkdir -p ~/grep_demo/logs/archive

सर्च परीक्षण के लिए उपयोग की जाने वाली डेटाबेस एरर लॉग फ़ाइल बनाने के लिए echo 'database error' > ~/grep_demo/logs/db.log कमांड चलाएँ।

echo ‘database error’ > ~/grep_demo/logs/db.log

सामान्य लॉग की जाँच के लिए कैश लॉग फ़ाइल बनाने हेतु echo 'cache hit' > ~/grep_demo/logs/cache.log कमांड चलाएँ।

echo ‘cache hit’ > ~/grep_demo/logs/cache.log

सबडायरेक्टरी नेविगेशन परीक्षण के लिए पिछली एरर लॉग फ़ाइल बनाने हेतु echo 'fatal error occurred' > ~/grep_demo/logs/archive/old.log कमांड चलाएँ।

echo ‘fatal error occurred’ > ~/grep_demo/logs/archive/old.log

-r विकल्प और -n विकल्प का एक साथ उपयोग करने पर यह सबडायरेक्टरीज़ तक पुनरावर्ती रूप से खोज करता है और साथ ही मेल खाने वाली पंक्तियों की लाइन संख्या भी प्रदर्शित करता है।
logs डायरेक्टरी और उसकी सबडायरेक्टरी archive में स्थित फ़ाइलों में से error स्ट्रिंग वाली फ़ाइल का पथ, पंक्ति संख्या और सामग्री सभी आउटपुट में दिखाई देते हैं।

grep -rn ’error’ ~/grep_demo/logs

-l विकल्प जोड़कर इसे -rl के रूप में चलाने पर, मेल खाने वाली सामग्री के बजाय केवल उन फ़ाइलों के पथ की सूची आउटपुट होती है जिनमें वह पैटर्न मौजूद है।
यह कई लॉग फ़ाइलों में से केवल उन्हीं फ़ाइलों को तुरंत पहचानने के लिए बहुत उपयोगी है जिनमें error हुई है।

grep -rl ’error’ ~/grep_demo/logs

खोज परिणामों के आसपास का संदर्भ देखना (-A, -B, -C) और रंग हाइलाइट

चरण-दर-चरण प्रक्रिया की प्रगति और त्रुटि संदर्भ की जाँच का अभ्यास करने के लिए एक नमूना लॉग फ़ाइल बनाने हेतु echo -e 'Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit' > process.log कमांड चलाएँ।

echo -e ‘Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit’ > process.log

-B और -A विकल्पों का उपयोग करने पर मेल खाने वाली पंक्ति के आधार पर क्रमशः पहले (Before) और बाद (After) की निर्दिष्ट संख्या में पंक्तियाँ आउटपुट होती हैं।
--color=always विकल्प के साथ मेल खाने वाले शब्द Critical Failure को रंग से हाइलाइट करते हुए, उससे पहले की 1 पंक्ति और बाद की 2 पंक्तियों की जाँच करके त्रुटि होने से पहले और बाद के वर्कफ़्लो को समझा जा सकता है।

grep –color=always -B 1 -A 2 ‘Critical Failure’ process.log

-C विकल्प का उपयोग करने पर मेल खाने वाली पंक्ति के आधार पर आगे और पीछे दोनों दिशाओं (Context) की समान संख्या में पंक्तियाँ एक साथ आउटपुट होती हैं।
Critical Failure वाली पंक्ति से ठीक पहले की 1 पंक्ति और ठीक बाद की 1 पंक्ति एक साथ प्रदर्शित होती है, जिससे मुख्य संदर्भ को और अधिक संक्षिप्त रूप से देखा जा सकता है।

grep –color=always -C 1 ‘Critical Failure’ process.log

अब तक, हमने उबंटू वातावरण में grep कमांड के बुनियादी खोज विकल्पों से लेकर व्यावहारिक लॉग विश्लेषण में इसके उपयोग तक की मुख्य बातों को समझा है।
आज सीखे गए इन पैटर्न्स का अपने वास्तविक टर्मिनल कार्यों में सक्रिय रूप से उपयोग करके अपनी कार्यकुशलता को एक नए स्तर पर ले जाएँ।