Grep का उपयोग करते समय लाइन नंबर प्राप्त करें


360

मैं एक स्ट्रिंग के लिए फ़ाइलों को खोजने के लिए grep पुनरावर्ती का उपयोग कर रहा हूं, और सभी मिलान की गई फाइलें और उस स्ट्रिंग वाली लाइनें टर्मिनल पर प्रिंट होती हैं। लेकिन क्या उन रेखाओं की रेखा संख्या भी प्राप्त करना संभव है ??

ex: वर्तमान में मुझे जो मिल रहा है /var/www/file.php: $options = "this.target", लेकिन मैं जो पाने की कोशिश कर रहा हूं /var/www/file.php: 1142 $options = "this.target";, वह अच्छी तरह से 1142उस स्ट्रिंग वाला लाइन नंबर कहां होगा।

सिंटेक्स मैं का उपयोग कर रहा हूँ grep पुनरावर्ती है sudo grep -r 'pattern' '/var/www/file.php'

एक और सवाल यह है कि, हम एक पैटर्न के बराबर परिणाम कैसे प्राप्त करते हैं। सभी फाइलों की तरह लेकिन एक निश्चित स्ट्रिंग वाले नहीं हैं?


-V ध्वज उन रेखाओं को दिखाएगा जो मेल नहीं खाती (grep -v
myText MyFile.txt

जवाबों:


546
grep -n SEARCHTERM file1 file2 ...

मेरा एक और क्विक क्वेश्चन था, कैसे हम एक पैटर्न के बराबर रिजल्ट नहीं पाते। सभी फाइलों की तरह लेकिन एक निश्चित स्ट्रिंग वाले नहीं हैं?
साईं

5
यह कमांड लाइन स्विच -v होगा। यदि आप 'grep --help' चलाते हैं, तो यह सभी विकल्प प्रदर्शित करेगा
Miro A.

56
-rयदि आप कई फाइलें निर्दिष्ट करते हैं, तो आपको इसकी आवश्यकता नहीं है । आपको केवल तभी आवश्यकता होती है -rजब आप निर्देशिका निर्दिष्ट करते हैं।
स्पार्कहॉक

@ जीनपॉल - मुझे -nr और -n -r दोनों के लिए एक ही परिणाम दिखाई देता है। आप किस संस्करण का उपयोग कर रहे हैं? $ grep -n -r नाम * | wc -l 1984 $ grep -nr नाम * | wc -l 1984 $ grep -V grep (BSD grep) 2.5.1-FreeBSD
Miro A.

कोड केवल उत्तर, कोई स्पष्टीकरण नहीं। : एस
फ्लोरिअन क्लेनैन

148

लाइन नंबर इसके साथ मुद्रित होते हैं grep -n:

grep -n pattern file.txt

केवल पंक्ति संख्या (मिलान रेखा के बिना) प्राप्त करने के लिए, कोई भी उपयोग कर सकता है cut:

grep -n pattern file.txt | cut -d : -f 1

लाइन्स नहीं प्रतिमान के साथ मुद्रित कर रहे हैं grep -v:

grep -v pattern file.txt

3
और अंतिम मिलान रेखा संख्या: grep -n pattern file.txt | cut -d : -f 1 | tail -1(आप इसे एक चर में सहेज सकते हैं और इसे उदा से इसका उपयोग कर सकते हैं; इससे फ़ाइल)
Nux

और प्रत्येक स्ट्रिंग की शुरुआत में संख्या / बृहदान्त्र को हटाने के लिए आप कुछ का उपयोग कर सकते हैं:grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
leetbacoon

24

यदि आप केवल पंक्ति संख्या ऐसा करना चाहते हैं:

grep -nr Pattern file.ext | gawk '{print $1}' FS=":"

उदाहरण:

$ grep -nr 9780545460262 EXT20130410.txt | gawk '{print $1}' FS=":" 
48793
52285
54023

1
awk -F: '{print $1}'भी काम करता है और आप की जरूरत नहीं है -rमें grep(केवल निर्देशिका रिकर्सिवली खोजा जा सकता है) जब फाइलों पर इस्तेमाल किया
स्टुअर्ट Cardall

7
grep -A20 -B20 pattern file.txt

पैटर्न खोजें और पैटर्न के बाद और पहले 20 लाइनें दिखाएं


11
यह बिल्कुल नहीं है जो पूछा गया था।
जोनाथन रेनहार्ट

3
इसके अलावा, -C20एक छोटा संस्करण है अगर वह यही चाहता था
मार्टी नील


0

पंक्ति संख्या के साथ परिणाम प्रदर्शित करने के लिए, आप यह कोशिश कर सकते हैं

grep -nr "word to search for" /path/to/file/file 

परिणाम कुछ इस तरह होना चाहिए:

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