स्ट्रिंग के लिए grep दूसरे स्ट्रिंग से पहले नहीं


10

क्या यह संभव है, ग्रेप का उपयोग कर, की घटनाओं के लिए खोज करने के लिए John Smith, लेकिन के उदाहरण को बाहर Mr John Smith?

जवाबों:


9

इसे नकारात्मक लुकअप के साथ एक नियमित अभिव्यक्ति का उपयोग करके हल किया जा सकता है (जो grepव्यवस्थित रूप से टिप्पणी द्वारा इंगित किया गया है :)

$ grep -P '(?<!Mr )John Smith' file

चूंकि समर्थन सिर्फ प्रयोगात्मक है, आप perlइसके बजाय उपयोग करना चाहते हैं :

$ perl -nle 'print if /(?<!Mr )John Smith/' file

यह प्रयोगात्मक में समर्थित है ग्रेप : echo $string | grep -P '(?<!Mr )John Smith'
व्यवस्थित करें

@ व्यवस्थित करें। धन्यवाद, मैं जवाब अपडेट करूंगा।
jcollado

6

आप निष्पादित कर सकते हैं

command | grep 'John Smith' | grep -v 'Mr John Smith'

1
अच्छा विचार है, लेकिन काम नहीं करेगा अगर लाइन हैJohn Smith Mr John Smith John Smith
Ron

1

नियमित अभिव्यक्ति का उपयोग करने के लिए, ^ और $ का उपयोग करें

grep "^John Smith$"

^ शुरुआत से मैच है $ अंत से मैच है।

आप किस फ़ाइल में खोज रहे हैं, इसके आधार पर वाक्य रचना अलग-अलग होगी।

आप sed, grep, awk ... के साथ नियमित एक्सप्रेशन का उपयोग कर सकते हैं।

उदाहरण

bodhi@Ubuntu:~ cat file
Mr John Smith
John Smith
John
Smith

bodhi@Ubuntu:~ grep "^John Smith$" file
John Smith

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