
grep के चारों ओर एक रैपर, जो आपको चीज़ें grep करने में मदद करता है
grep के चारों ओर एक रैपर ताकि सामान्य पैटर्न टाइप करने से बचा जा सके।
मैं grep का बहुत उपयोग करता हूँ। कोड बेस का ऑडिट करते समय, meg के आउटपुट को देखते समय, या सामान्य रूप से बड़ी मात्रा में डेटा से निपटते समय। मैं अक्सर इस तरह के काफी जटिल पैटर्न का उपयोग करते हुए समाप्त होता हूँ:
▶ grep -HnrE '(\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))' *
यह सब टाइप करते समय गड़बड़ करना वाकई आसान है, और यह जानना मुश्किल हो सकता है कि आपको कोई परिणाम नहीं मिले हैं क्योंकि खोजने के लिए कुछ है ही नहीं, या क्योंकि आपने पैटर्न लिखने में गड़बड़ की है या गलत फ्लैग चुने हैं।
मैंने gf को उन पैटर्न और फ्लैग संयोजनों को नाम देने के लिए लिखा है जिनका मैं हर समय उपयोग करता हूँ। इसलिए उपरोक्त कमांड बस बन जाती है:
▶ gf php-sources
पैटर्न परिभाषाएँ ~/.gf में छोटी JSON फ़ाइलों के रूप में संग्रहीत की जाती हैं जिन्हें वर्शन कंट्रोल के अंतर्गत रखा जा सकता है:
▶ cat ~/.gf/php-sources.json
{
"flags": "-HnrE",
"pattern": "(\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))"
}
पैटर्न की लंबाई और जटिलता को थोड़ा कम करने में मदद के लिए, आप कई पैटर्न की सूची भी निर्दिष्ट कर सकते हैं:
▶ cat ~/.gf/php-sources-multiple.json
{
"flags": "-HnrE",
"patterns": [
"\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)",
"php://(input|stdin)"
]
}
examples निर्देशिका में कुछ और उदाहरण पैटर्न फ़ाइलें हैं।
आप कमांड लाइन से पैटर्न फ़ाइलें बनाने के लिए -save फ्लैग का उपयोग कर सकते हैं:
▶ gf -save php-serialized -HnrE '(a:[0-9]+:{|O:[0-9]+:"|s:[0-9]+:")'
एक ऑटो-कम्पलीट स्क्रिप्ट शामिल है, ताकि आप यह देखने के लिए 'tab' दबा सकें कि आपके विकल्प क्या हैं:
▶ gf <tab>
base64 debug-pages fw php-curl php-errors php-sinks php-sources sec takeovers urls
ऑटो-कम्पलीट काम करवाने के लिए आपको अपने .bashrc या ऐसी ही फ़ाइल में gf-completion.bash फ़ाइल को source करना होगा:
source ~/path/to/gf-completion.bash
ऑटो-कम्पलीट काम करवाने के लिए आपको autoload -U compaudit && compinit का उपयोग करके ऑटोकम्पलीट सक्षम करना होगा (यदि आपके पास oh-my-zsh है तो इसकी आवश्यकता नहीं है) या इसे .zshrc में डालना होगा।
फिर अपने .zshrc या ऐसी ही फ़ाइल में gf-completion.zsh फ़ाइल को source करें:
source ~/path/to/gf-completion.zsh
नोट: यदि आप oh-my-zsh या ऐसा ही कुछ उपयोग कर रहे हैं तो आप पा सकते हैं कि gf git fetch के लिए एक alias है। आप या तो gf बाइनरी को किसी और चीज़ का alias बना सकते हैं, या git fetch alias को हटाने के लिए unalias gf चला सकते हैं।
बाज़ार में कुछ अद्भुत कोड खोज इंजन हैं जो grep के बेहतर विकल्प हो सकते हैं।
एक अच्छा उदाहरण the silver searcher है।
यह तेज़ है (जैसे बहुत तेज़) और परिणामों को अधिक दृश्य रूप से सुपाच्य तरीके से प्रस्तुत करता है।
किसी भिन्न इंजन का उपयोग करने के लिए, प्रासंगिक पैटर्न फ़ाइल में engine: <other tool> जोड़ें:
# Using the silver searcher instead of grep for the aws-keys pattern:
# 1. Adding "ag" engine
# 2. Removing the E flag which is irrelevant for ag
{
"engine": "ag",
"flags": "-Hanr",
"pattern": "([^A-Z0-9]|^)(AKIA|A3T|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{12,}"
}
aws-keys.json फ़ाइल से फ्लैग E को हटाना होगा।यदि आपके पास Go इंस्टॉल और कॉन्फ़िगर है तो आप gf को इसके साथ इंस्टॉल कर सकते हैं:
▶ go get -u github.com/tomnomnom/gf
यदि आपने go get का उपयोग करके इंस्टॉल किया है, तो आप इस तरह अपने .bashrc में ऑटो-कम्पलीट सक्षम कर सकते हैं:
▶ echo 'source $GOPATH/src/github.com/tomnomnom/gf/gf-completion.bash' >> ~/.bashrc
ध्यान दें कि परिवर्तनों को प्रभावी करने के लिए आपको अपना टर्मिनल पुनः आरंभ करना होगा, या source ~/.bashrc चलाना होगा।
जल्दी शुरू करने के लिए, आप उदाहरण पैटर्न फ़ाइलों को इस तरह ~/.gf में कॉपी कर सकते हैं:
▶ cp -r $GOPATH/src/github.com/tomnomnom/gf/examples ~/.gf
मेरे व्यक्तिगत पैटर्न जिन्हें मैंने उदाहरण के रूप में शामिल किया है, आपके लिए बहुत उपयोगी नहीं हो सकते हैं, लेकिन उम्मीद है कि वे अभी भी संदर्भ का एक उचित बिंदु हैं।
वास्तव में मुझे नई पैटर्न फ़ाइलों में सबसे अधिक रुचि होगी! यदि आपके पास कुछ ऐसा है जिसे आप नियमित रूप से grep करते हैं, तो बेझिझक examples निर्देशिका में नई पैटर्न फ़ाइलें जोड़ने के लिए PR जारी करें।
बग फिक्स का भी हमेशा स्वागत है :)