मैं एक फ़ाइल को पूँछना चाहता हूँ, लेकिन केवल आउटपुट लाइनें जो उनमें एक निश्चित स्ट्रिंग है। क्या यह संभव है?
मैं एक फ़ाइल को पूँछना चाहता हूँ, लेकिन केवल आउटपुट लाइनें जो उनमें एक निश्चित स्ट्रिंग है। क्या यह संभव है?
जवाबों:
grep का उपयोग करें। इसका निर्माण सिर्फ उस उद्देश्य के लिए किया गया था।
/ Var / log / syslog की एक पूंछ से लाइनें खोजने के लिए जिसमें "क्रोन" है, बस चलाएं:
tail -f /var/log/syslog | grep cron
और चूंकि यह स्टड पर किसी भी चीज को स्वीकार करता है, आप इसे किसी भी अन्य कमांड के आउटपुट पर भी उपयोग कर सकते हैं, ऊपर के रूप में उसी तरह से पाइपिंग करके (उपयोग करते हुए | प्रतीक) |
यहां कुछ अन्य विचार दिए गए हैं, जो सरल नहीं होने पर, कुछ दिलचस्प अतिरिक्त लचीलापन प्रदान कर सकते हैं:
सबसे पहले, आप grep के बजाय awk से फ़िल्टर कर सकते हैं:
tail -f /var/log/messages | awk '/myfilterword/'
उदाहरण के रूप में उपयोग के रूप में बिल्कुल वैसा ही काम करता है grep
। उदाहरण के लिए, awk की शक्ति का उपयोग करके आप इस पर विस्तार कर सकते हैं:
tail -f /var/log/messages | \
awk '/myfilterword/ { for (i=6; i<=NF; i++) printf("%s ", $i); printf("\n")}'
जो उत्पादन के अंतिम क्षेत्र के माध्यम से 6 को प्रिंट करेगा (फ़ील्ड व्हॉट्सएप अलग हो गए हैं)
एक अन्य समान विचार एक पर्ल वन-लाइनर का उपयोग करना है:
tail -f /var/log/messages | perl -ne "/myfilterword/ and print"
यह ठीक उसी तरह काम करता है grep
। शायद आप एक लाइन नंबर काउंटर और सिर्फ 6 वां क्षेत्र चाहते हैं? इस बारे में कैसा है:
tail -f /var/log/messages | \
perl -lane "/myfilterword/ and printf \"%6d %s\n\",++\$a,\$F[6]"
जाहिर है कि इन सभी प्रकार की चीजों को अन्य उपकरणों के साथ भी किया जा सकता है, लेकिन मैं यह स्पष्ट करना चाहता था कि यहां कुछ सामान्य उद्देश्य भाषाओं जैसे कि awk या perl का उपयोग करने के कुछ मजेदार तरीके हैं।
ध्यान देने योग्य एक और चाल है, अगर आपके पास हेडर के साथ एक सीएसवी फ़ाइल है जिसे आप छोड़ना चाहते हैं, जैसे:
% cat data.txt
fruit dessert calories
Apple Pie 770
Banana Pudding 625
Cherry Cobbler 990
% tail -n +2 data.txt
Apple Pie 770
Banana Pudding 625
Cherry Cobbler 990
इससे कोई फर्क नहीं पड़ता कि इनपुट कितने समय के लिए tail
है, +n -2
पहली पंक्ति को छोड़ देगा।
grep
जब यह गैर-अंतःक्रियात्मक रूप से उपयोग किया जाता है, तो बफर होगा जब यह एक लंबी पाइपलाइन का हिस्सा होता है। GNU grep 2.5.1--line-buffered
पाइपलाइन से grep को खत्म करने का विकल्प नहीं होने पर इसके आसपास काम करने का विकल्प प्रदान करता है । (जब मैं कहता हूं कि grep बफर होगा मेरा मतलब है कि आप आउटपुट को तब तक नहीं देखेंगे जब तक कि बफर 4k जैसी किसी चीज तक नहीं पहुंच जाता है।)