मैं grep आउटपुट से अद्वितीय परिणामों को कैसे फ़िल्टर कर सकता हूं?


75

लिनक्स में, मैं एक स्ट्रिंग का उपयोग करके एक फ़ाइल से पकड़ सकता हूं grep mySearchString myFile.txt। मैं केवल वही परिणाम प्राप्त कर सकता हूं जो अद्वितीय हैं?

जवाबों:


125

आप इसे sortऔर uniqउपयोगिताओं के साथ प्राप्त कर सकते हैं।

उदाहरण:

[जॉन @ कमाल ~] $ इको-ई "टेस्ट \ ntest \ ntest \ nanother परीक्षण \ nest"
परीक्षा
परीक्षा
परीक्षा
एक और परीक्षण
परीक्षा
[जॉन @ भयानक ~] $ इको-ई "टेस्ट \ ntest \ ntest \ nanother परीक्षण \ ntest" | सॉर्ट | uniq
एक और परीक्षण
परीक्षा

डेटा के आधार पर आप कुछ स्विच का भी उपयोग कर सकते हैं।


9
@ जॉन् टी - यदि डेटा ऑर्डर नहीं किया जाता है, तो मैं sortपहले उपयोग करने की सलाह दूंगा uniq। अन्यथा uniqपूरी तरह से काम नहीं करेगा।
स्टडर

t अब मैं बढ़ा सकता हूँ! आपने मुझे यहां अन्य लिपियों को लिखने में भी मदद की;)
स्टडर

42
के sort -uबजाय का उपयोग करें sort | uniq। यह एक प्रक्रिया को बचाता है, कुल I / O को कम करता है, और कुल तुलनाओं की संख्या को कम करता है जिन्हें बनाना पड़ता है।
क्रिस जॉन्सन

@ChrisJohnsen आपको उस टिप्पणी का उत्तर देना चाहिए क्योंकि यह एक बेहतर समाधान है तो वर्तमान में दिया गया उत्तर
निको वैन बेले

1

आप उपयोग कर सकते हैं:

grep -rohP "(mySearchString)" . | sort -u

-आर: पुनरावर्ती

-o: केवल टेक्स्ट के मिलान वाले भाग को प्रिंट करें

-h: फ़ाइल नाम न छापें

- 8. पर्ल स्टाइल रेगेक्स (आप अपने मामले के आधार पर इसके बजाय उपयोग कर सकते हैं)

sort -usort | uniq@ क्रिस जॉन्सन ने बताया कि इससे बेहतर है ।

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