शाब्दिक तार के लिए Grep


101

मैं विशुद्ध रूप से शाब्दिक तार के लिए खोज करने के लिए एक grep-type टूल के बाद हूं। मैं एक लॉग फ़ाइल की एक पंक्ति की घटना के लिए देख रहा हूँ, एक अलग लॉग फ़ाइल में एक पंक्ति के भाग के रूप में। खोज पाठ में सभी प्रकार के regex विशेष वर्ण हो सकते हैं, उदा []().*^$-\

क्या एक यूनिक्स खोज उपयोगिता है जो रेगेक्स का उपयोग नहीं करेगा, लेकिन सिर्फ एक स्ट्रिंग के शाब्दिक घटनाओं की खोज करेगा?


आश्चर्य क्यों सवाल "मैं grepशाब्दिक तार के लिए खोज कर सकते हैं?" इसके बजाय "क्या ऐसा कुछ है grepजो शाब्दिक तार की खोज कर सकता है?" फ्लैट-हेड स्क्रू ड्रायर्स फिलिप्स स्क्रू-हेड्स फिट कर सकते हैं, आप जानते हैं;)
ADTC

जवाबों:


136

-F विकल्प के साथ, आप उसके लिए grep का उपयोग कर सकते हैं।

-F, --fixed-strings       PATTERN is a set of newline-separated fixed strings

"न्यूलाइन-सेपरेटेड फिक्स्ड स्ट्रिंग्स" टर्मिनल प्रॉम्प्ट पर मैं यह कैसे कर सकता हूं? मुझे पता है कि मैं एक पैटर्न फ़ाइल बना सकता हूं, लेकिन फ़ाइल के बिना, क्या प्रॉम्प्ट पर ऐसा करना संभव है? Enter दबाने पर जाहिर तौर पर कमांड निष्पादित होती है।
ADTC

13
मैं अपने प्रश्न का उत्तर दूंगा। :) आपको बस -eविकल्प के दोहराव का उपयोग करके कई निश्चित तार प्रदान करने की आवश्यकता है । इस तरह grep -F -e "fixed1" -e "fixed2" -e "fixed3" -e "fixed4":। कोई नई सुचना की आवश्यकता नहीं है;)
एडीटीसी '

2
सोलारिस पर उपलब्ध नहीं है। इसके बजाय fgrepप्रयोग किया जाता है।
मेजकिनटोर

2
@ADTC मुझे पता चला कि मुझे केवल विशेष वर्ण वाले खोज स्ट्रिंग के लिए एकल उद्धरणों का उपयोग करना था, और कुछ भी नहीं मिलेगा। तो यह कोई परिणाम नहीं लौटा: grep --include=\*.php -FRn -e "$$"एकल क्वॉइट का उपयोग करने से मुझे वांछित परिणाम मिला:grep --include=\*.php -FRn -e '$$'
पीमॉल

2
आप @ADTC सही हैं$और कुछ अन्य वर्ण विशेष हैं और आपके द्वारा हिट दर्ज करने से पहले और grep(या जो कुछ भी कमांड निष्पादित होता है) के बाद उन्हें बैश द्वारा बदल दिया जाएगा । आप सभी पात्रों को छोड़ने के लिए कह सकते हैं (एक उद्धरण को छोड़कर) उन्हें एकल उद्धरण के अंदर संलग्न करके अछूता। यदि आपको एक उद्धरण टाइप करने की आवश्यकता है तो इसे इस तरह करें'I'\''m special'
ndemou

14

वह fgrepया तो है या grep -Fजो नियमित अभिव्यक्ति नहीं करेगा। fgrepसमान है, grep -Fलेकिन मैं तर्कों के बारे में चिंता नहीं करना चाहता, आंतरिक रूप से आलसी होना

grep   ->  grep
fgrep  ->  grep -F  (fixed)
egrep  ->  grep -E  (extended)
rgrep  ->  grep -r  (recursive, on platforms that support it).

GNU grep के लिए,
frerep

3
egrepऔर fgrepPOSIX मानक द्वारा निर्दिष्ट नहीं हैं; grep -Fऔर grep -E हैं
रिचर्ड हैनसेन


3

आप awk का भी उपयोग कर सकते हैं, क्योंकि इसमें निश्चित स्ट्रिंग को खोजने की क्षमता है, साथ ही प्रोग्रामिंग क्षमताओं, जैसे केवल

awk '{for(i=1;i<=NF;i++) if($i == "mystring") {print "do data manipulation here"} }' file

2
cat list.txt
one:hello:world
two:2:nothello

three:3:kudos

grep --color=always -F"hello

three" list.txt

उत्पादन

one:hello:world
three:3:kudos

2
मैं सहमत नहीं हूँ। इसका एक उपयोगी चित्रण है कि यह कैसे काम करता है।
तैमवाघ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.