जब फ़ाइल में स्ट्रिंग न हो तो grep का उपयोग कैसे करें


26

मेरी बैश स्क्रिप्ट में मैं एक लाइन को प्रिंट करने की कोशिश कर रहा हूं, अगर किसी फाइल में कुछ स्ट्रिंग मौजूद नहीं है।

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"

यदि मैंने स्ट्रिंग को फ़ाइल में मौजूद करना चाहा तो मैंने इसे कैसे लिखा, लेकिन मैं इसे कैसे बदल सकता हूं ताकि इसे प्रिंट किया जा सके "उपयोगकर्ता मौजूद नहीं है" यदि उपयोगकर्ता / etc / passwd फ़ाइल में नहीं मिला है?

जवाबों:


49

grepअगर यह पैटर्न का कम से कम एक उदाहरण और विफलता मिलती है तो यह सफलता लौटाएगा। तो आप या तो एक elseखंड जोड़ सकते हैं यदि आप चाहते हैं कि दोनों "करता है" और "नहीं करता है" प्रिंट करता है, या आप ifकेवल असफलताओं को प्राप्त करने के लिए शर्त को नकार सकते हैं । प्रत्येक का एक उदाहरण:

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"
else
    echo "User does not exist!!"
fi

if ! grep -q "$user2" /etc/passwd; then
    echo "User does not exist!!"
fi

2

बाहर निकलने की स्थिति देखने के लिए एक विकल्प है grep। उदाहरण के लिए:

grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
    echo "User does not exist!!"

यदि grepएक मैच खोजने में विफल रहता है 1तो यह बाहर निकल जाएगा , इसलिए $?होगा 1grepहमेशा 0सफल होने पर लौटेगा । तो यह उपयोग करने के लिए सुरक्षित $? != 0है $? == 1


यह वास्तव में एरिक ने जो कहा, वह कहने का एक लंबा रास्ता है ।
जेफ स्कालर

खैर, मेरे लिए नकारात्मक if ! grep ...बयान से काम नहीं चला। तो यह एक विकल्प है।
संकेश

1

मैं इसे सरल एक लाइनर के साथ हल करता हूं:

for f in *.txt; do grep "tasks:" $f || echo $f; done

कमांड txt एक्सटेंशन के साथ डायरेक्टरी की सभी फाइलों को चेक करेगी और या तो सर्च स्ट्रिंग (या "कार्य:") लिख देगी यदि फाइल का नाम मिला है या नहीं।


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