कहाँ ग्रेप से आया - Computerphile
विषयसूची:
- ग्रीप कमांड सिंटेक्स
- फ़ाइलों में एक स्ट्रिंग के लिए खोज करने के लिए
grep
का उपयोग कैसे करें - इनवर्ट मैच (बहिष्कृत)
- कमांड आउटपुट में स्ट्रिंग की खोज करने के लिए ग्रीप का उपयोग कैसे करें
- पुनरावर्ती खोज
- केवल फ़ाइल नाम दिखाएँ
- केस असंवेदनशील खोज
- पूर्ण शब्दों के लिए खोजें
- लाइन नंबर दिखाएं
- माचिस गिनना
- एकाधिक स्ट्रिंग्स (पैटर्न) के लिए खोजें
- शांत तरीका
- बुनियादी नियमित अभिव्यक्ति
- एक्सटेंडेड रेगुलर एक्सप्रेशन
- मैच से पहले प्रिंट लाइनें
- एक मैच के बाद प्रिंट लाइन्स
- निष्कर्ष
grep
कमांड जो "वैश्विक नियमित अभिव्यक्ति प्रिंट" के लिए खड़ा है, लिनक्स में सबसे शक्तिशाली और आमतौर पर इस्तेमाल किए जाने वाले कमांड में से एक है।
Grep उन लाइनों के लिए एक या एक से अधिक इनपुट फ़ाइलों की खोज करता है जो किसी दिए गए पैटर्न से मेल खाती हैं और प्रत्येक मिलान रेखा को मानक आउटपुट में लिखती हैं। यदि कोई फाइल निर्दिष्ट नहीं है, तो
grep
मानक इनपुट से पढ़ता है, जो आमतौर पर किसी अन्य कमांड का आउटपुट होता है।
इस ट्यूटोरियल में, हम आपको दिखाएंगे कि व्यावहारिक उदाहरणों के माध्यम से
grep
कमांड का उपयोग कैसे करें, और सबसे सामान्य GNU
grep
विकल्पों की विस्तृत व्याख्या करें।
ग्रीप कमांड सिंटेक्स
grep
कमांड का उपयोग करने के तरीके में जाने से पहले, आइए मूल सिंटैक्स की समीक्षा करके शुरू करें।
grep
उपयोगिता अभिव्यक्ति निम्नलिखित रूप लेती है:
grep PATTERN
वर्ग कोष्ठक में आइटम वैकल्पिक हैं।
-
OPTIONS
- शून्य या अधिक विकल्प। ग्रीप कई विकल्प प्रदान करता है जो इसके व्यवहार को नियंत्रित करते हैं।PATTERN
- खोज पैटर्न।FILE
- शून्य या अधिक इनपुट फ़ाइल नाम।
फ़ाइल को खोजने में सक्षम होने के लिए, कमांड चलाने वाले उपयोगकर्ता को फ़ाइल तक पहुंच पढ़ना होगा।
फ़ाइलों में एक स्ट्रिंग के लिए खोज करने के लिए
grep
का उपयोग कैसे करें
grep
कमांड का सबसे मूल उपयोग एक फ़ाइल में एक स्ट्रिंग (पाठ) की खोज करना है।
उदाहरण के लिए, स्ट्रिंग /
bash
वाली
/etc/passwd
फ़ाइल से लाइनें प्रदर्शित करने के लिए आप निम्नलिखित कमांड का उपयोग कर सकते हैं:
grep bash /etc/passwd
आउटपुट कुछ इस तरह दिखना चाहिए:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
यदि स्ट्रिंग में स्थान शामिल हैं, तो आपको इसे एकल या दोहरे उद्धरण चिह्नों में संलग्न करना होगा:
grep "Gnome Display Manager" /etc/passwd
इनवर्ट मैच (बहिष्कृत)
उन लाइनों को प्रदर्शित करने के लिए जो एक पैटर्न से मेल नहीं खाती हैं,
-v
(या -
--invert-match
) विकल्प का उपयोग करें।
उदाहरण के लिए
/etc/passwd
फ़ाइल से उन पंक्तियों को प्रदर्शित करने के लिए, जिनमें स्ट्रिंग
nologin
नहीं है,
nologin
आप निम्न कमांड का उपयोग कर सकते हैं:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
कमांड आउटपुट में स्ट्रिंग की खोज करने के लिए ग्रीप का उपयोग कैसे करें
इनपुट फ़ाइलों को निर्दिष्ट करने के बजाय, आप
grep
लिए किसी अन्य कमांड के आउटपुट को पाइप कर सकते हैं, और फिर दिए गए पैटर्न से मेल खाते हुए लाइनों को प्रदर्शित कर सकते हैं।
उदाहरण के लिए, यह जानने के लिए कि उपयोगकर्ता
www-data
रूप में आपके सिस्टम पर कौन-सी प्रक्रियाएँ चला रहे हैं, आप निम्न
ps
कमांड का उपयोग कर सकते हैं:
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
आप कमांड पर कई पाइप को चेन भी कर सकते हैं। जैसा कि आप ऊपर दिए गए आउटपुट में देख सकते हैं कि
grep
प्रक्रिया वाली एक पंक्ति भी है। यदि आप नहीं चाहते कि नीचे दिखाए गए अनुसार लाइन को दूसरे
grep
उदाहरण के लिए आउटपुट दिया जाए।
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
पुनरावर्ती खोज
पैटर्न का उपयोग करने के लिए पुनरावर्ती खोज करने के लिए,
-r
विकल्प (या
--recursive
) का उपयोग करें। यह निर्दिष्ट निर्देशिका में सभी फ़ाइलों के माध्यम से खोज करेगा, जो पुनरावृत्ति का सामना कर रहे सिम्बलिंक को छोड़ देगा। सभी प्रतीकात्मक लिंक का पालन करने के लिए,
-R
विकल्प (या
--dereference-recursive
) का उपयोग करें।
निम्नलिखित उदाहरण में हम
/etc
निर्देशिका के अंदर सभी फ़ाइलों में string
linuxize.com
खोज कर रहे हैं:
grep -r linuxize.com /etc
कमांड फ़ाइल के लिए पूर्ण पथ द्वारा उपसर्ग मिलान लाइनों को मुद्रित करेगा।
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
यदि इसके बजाय
-r
उपयोग करें
-R
विकल्प
grep
सभी प्रतीकात्मक लिंक का अनुसरण करेगा:
grep -R linuxize.com /etc
आउटपुट की अंतिम पंक्ति पर ध्यान दें। वह रेखा ऊपर के उदाहरण में नहीं छपी है क्योंकि निग्नेक्स की
sites-enabled
निर्देशिका के अंदर की फाइलें
sites-available
निर्देशिका के अंदर कॉन्फ़िगरेशन फ़ाइलों के लिए सीमलिंक हैं।
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
केवल फ़ाइल नाम दिखाएँ
डिफ़ॉल्ट
grep
आउटपुट को दबाने और केवल मिलान किए गए पैटर्न वाली फ़ाइलों के नाम को प्रिंट करने के लिए, आप
-l
(या
--files-with-matches
) विकल्प का उपयोग कर सकते हैं।
उदाहरण के लिए, वर्तमान कार्यशील निर्देशिका में
linuxize.com
साथ समाप्त होने वाली सभी फ़ाइलों को खोजने के लिए और केवल स्ट्रिंग
linuxize.com
युक्त फाइलों के नाम प्रिंट करें:
grep -l linuxize.com *.conf
आउटपुट कुछ इस तरह दिखाई देगा:
tmux.conf haproxy.conf
-l
विकल्प आमतौर पर पुनरावर्ती विकल्प के साथ संयोजन में उपयोग किया जाता है
-R
:
केस असंवेदनशील खोज
डिफ़ॉल्ट रूप से,
grep
कमांड संवेदनशील होता है। इसका मतलब यह है कि अपरकेस और लोअरकेस वर्णों को अलग माना जाता है।
खोज करते समय मामले को अनदेखा करने के लिए,
-i
विकल्प (या
--ignore-case
) का उपयोग करें।
उदाहरण के लिए, बिना किसी विकल्प के
Zebra
खोज करते समय, निम्न कमांड कोई आउटपुट नहीं दिखाएगा अर्थात मेल खाने वाली लाइनें हैं:
grep Zebra /usr/share/words
लेकिन यदि आप
-i
विकल्प का उपयोग करके असंवेदनशील खोज करते हैं, तो यह ऊपरी और निचले दोनों मामलों के अक्षरों से मेल खाएगा:
grep -i Zebra /usr/share/words
"ज़ेबरा" निर्दिष्ट करना उस स्ट्रिंग के लिए "ज़ेबरा", "ज़ेब्रा" या ऊपरी और निचले मामले के अक्षरों के किसी भी अन्य संयोजन से मेल खाएगा।
पूर्ण शब्दों के लिए खोजें
"ग्नू" की खोज करते समय,
grep
उन रेखाओं को भी प्रिंट करेगा जहाँ "ग्नू" को "साइग्नस" या "मैग्नम" जैसे बड़े शब्दों में एम्बेड किया गया है।
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
केवल उन पंक्तियों को वापस करने के लिए जहां निर्दिष्ट स्ट्रिंग एक पूरा शब्द है (गैर-शब्द वर्णों से घिरा हुआ),
-w
(
--word-regexp
) विकल्प का उपयोग करें।
az
,
AZ
और
0-9
) और अंडरस्कोर (
_
) शामिल हैं। अन्य सभी वर्णों को गैर-शब्द अक्षर माना जाता है।
grep -w gnu /usr/share/words
लाइन नंबर दिखाएं
उन पंक्तियों की संख्या दिखाने के लिए जिनमें एक स्ट्रिंग है जो एक पैटर्न से मेल खाती है,
-n
(या
--line-number
) विकल्प का उपयोग करें। इस विकल्प का उपयोग करते समय,
grep
मैचों को उस मानक संख्या तक प्रिंट करेगा, जो उस लाइन नंबर के साथ उपसर्गित थी, जिस पर यह पाया गया था।
उदाहरण के लिए
/etc/services
Services फ़ाइल से लाइनों को प्रदर्शित करने के लिए जिसमें स्ट्रिंग
bash
का मिलान लाइन नंबर के साथ उपसर्ग किया गया है, आप निम्नलिखित लिंक का उपयोग कर सकते हैं:
grep -n 10000 /etc/services
नीचे दिए गए आउटपुट से पता चलता है कि मैच 10423 और 10424 लाइनों पर पाए जाते हैं।
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
माचिस गिनना
मानक उत्पादन के लिए मिलान लाइनों की एक संख्या को मुद्रित करने के लिए,
-c
(या
--count
) विकल्प का उपयोग करें।
नीचे दिए गए उदाहरण में, हम उन खातों की संख्या की गिनती कर रहे हैं जिनके पास शेल के रूप में
/usr/bin/zsh
।
grep -c '/usr/bin/zsh' /etc/passwd
एकाधिक स्ट्रिंग्स (पैटर्न) के लिए खोजें
OR ऑपरेटर का उपयोग करके दो या अधिक खोज पैटर्न जोड़े जा सकते हैं ।
डिफ़ॉल्ट रूप से,
grep
पैटर्न को एक नियमित नियमित अभिव्यक्ति के रूप में व्याख्या करता है जहाँ मेटा-वर्ण जैसे कि
|
अपना विशेष अर्थ खो देते हैं, और उनके बैकस्लेस्ड संस्करणों का उपयोग करना चाहिए।
नीचे दिए गए उदाहरण में हम Nginx लॉग त्रुटि फ़ाइल में
fatal
,
error
और
critical
शब्दों की सभी घटनाओं को खोज रहे हैं:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
शांत तरीका
-q
(या
--quiet
)
grep
को टर्मिनल (मानक आउटपुट) पर कुछ भी नहीं लिखने के लिए कहता है। यदि कोई मैच पाया जाता है, तो कमांड स्टेटस
0
से बाहर निकल जाएगा। शेल स्क्रिप्ट्स में
grep
का उपयोग करते समय यह उपयोगी होता है, जहाँ आप यह जाँचना चाहते हैं कि फ़ाइल में स्ट्रिंग है या नहीं और परिणाम के आधार पर एक निश्चित कार्रवाई करते हैं।
यहाँ एक शांत मोड में
grep
का उपयोग करने का एक उदाहरण है
if
एक बयान में परीक्षण कमांड के रूप में:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
बुनियादी नियमित अभिव्यक्ति
जीएनयू ग्रीप में दो नियमित अभिव्यक्ति सुविधा सेट हैं, बेसिक और विस्तारित। डिफ़ॉल्ट रूप से,
grep
एक नियमित नियमित अभिव्यक्ति के रूप में पैटर्न की व्याख्या करता है।
जब मूल नियमित अभिव्यक्ति मोड में उपयोग किया जाता है, तो मेटा-वर्णों को छोड़कर अन्य सभी वर्ण, वास्तव में नियमित अभिव्यक्ति होते हैं जो स्वयं से मेल खाते हैं। नीचे आमतौर पर उपयोग किए जाने वाले मेटा-पात्रों की सूची दी गई है:
-
लाइन की शुरुआत में अभिव्यक्ति से मिलान करने के लिए
^
(कैरेट) प्रतीक का उपयोग करें। निम्नलिखित उदाहरण में, स्ट्रिंग^kangaroo
केवल तभी मैच करेगा जब यह एक पंक्ति की शुरुआत में होता है।grep "^kangaroo" file.txt
एक पंक्ति के अंत में अभिव्यक्ति से मेल करने के लिए
$
(डॉलर) प्रतीक का उपयोग करें। निम्न उदाहरण में, स्ट्रिंगkangaroo$
केवल तभी मेल खाएगा जब यह एक पंक्ति के बहुत अंत में होता है।grep "kangaroo$" file.txt
का प्रयोग करें
.
(अवधि) किसी एक वर्ण से मेल करने के लिए प्रतीक। उदाहरण के लिए,kan
शुरू होने वाली किसी भी चीज़ से मेल खाने के लिए दो वर्ण होते हैं और स्ट्रिंगroo
साथ समाप्त होते हैं, आप निम्न पैटर्न का उपयोग कर सकते हैं:grep "kan..roo" file.txt
उपयोग
accept
या "accent
"accent
, आप निम्नलिखित पैटर्न का उपयोग कर सकते हैं:grep "accet" file.txt
उपयोग
co(any_letter_except_l)a
किसी भी संयोजन से मेलco(any_letter_except_l)a
जैसे,coca
,cobalt
और इतने पर, लेकिनcola
युक्त लाइनों से मेल नहीं खाएगा।grep "coa" file.txt
अगले वर्ण के विशेष अर्थ से बचने के लिए,
\
(बैकस्लैश) प्रतीक का उपयोग करें।
एक्सटेंडेड रेगुलर एक्सप्रेशन
पैटर्न को एक विस्तारित नियमित अभिव्यक्ति के रूप में व्याख्या करने के लिए,
-E
(या
--extended-regexp
) विकल्प का उपयोग करें। विस्तारित नियमित अभिव्यक्तियों में अधिक जटिल और शक्तिशाली खोज पैटर्न बनाने के लिए अतिरिक्त मेटा-वर्णों के साथ सभी बुनियादी मेटा-वर्ण शामिल हैं। नीचे कुछ उदाहरण दिए गए हैं:
-
दिए गए फ़ाइल से सभी ईमेल पतों को मिलान और निकालें:
grep -E -o "\b+@+\.{2, 6}\b" file.txt
किसी दिए गए फ़ाइल से सभी मान्य आईपी पते को मिलाएं और निकालें:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
-o
विकल्प का उपयोग केवल मिलान स्ट्रिंग को प्रिंट करने के लिए किया जाता है।
मैच से पहले प्रिंट लाइनें
मिलान लाइनों से पहले एक विशिष्ट संख्या में लाइनों को मुद्रित करने के लिए,
-B
(या
--before-context
) विकल्प का उपयोग करें।
उदाहरण के लिए, मिलान लाइनों से पहले प्रमुख संदर्भ की पांच पंक्तियों को प्रदर्शित करने के लिए, आप निम्न कमांड का उपयोग करेंगे:
एक मैच के बाद प्रिंट लाइन्स
मिलान लाइनों के बाद विशिष्ट संख्या में लाइनों को मुद्रित करने के लिए, (या
--after-context
) विकल्प का उपयोग करें।
उदाहरण के लिए मिलान लाइनों के बाद अनुगामी संदर्भ की पांच पंक्तियों को प्रदर्शित करने के लिए, आप निम्नलिखित कमांड का उपयोग करेंगे:
निष्कर्ष
grep
कमांड आपको फाइलों के अंदर एक पैटर्न की खोज करने की अनुमति देता है। यदि एक मैच पाया जाता है, तो grep निर्दिष्ट पैटर्न वाली लाइनों को प्रिंट करेगा।
ग्रीप उपयोगकर्ता के मैनुअल पेज पर ग्रीप के बारे में जानने के लिए बहुत कुछ है।
grep टर्मिनलहार्ड-से-ढूँढें 800 नंबर ढूंढें
एओएल के लिए कोई सेवा या सहायता नंबर नहीं मिल सकता है? माइक्रोसॉफ्ट? याहू? इस साइट पर सैकड़ों लोग हैं।
स्कैन किए गए फाइलों में पाठ ढूंढें डेस्कटॉप को याद करें
यह कार्यक्रम तब जाता है जहां अन्य खोज कार्यक्रम नहीं होते हैं: ई-मेल, पीडीएफ, स्कैन दस्तावेजों और अधिक।
क्रोम, सादा पाठ में सादा पाठ के रूप में प्रतिलिपि बनाएं और पेस्ट करें
यह पोस्ट आपको दिखाता है कि टेक्स्ट को कॉपी और पेस्ट करने के लिए सादे अनफॉर्मेटेड टेक्स्ट को मूल रूप से कैसे , विंडोज 8/7 में क्रोम या फ़ायरफ़ॉक्स ब्राउज़र का उपयोग करते समय