गैर-मिलान फ़ाइल के प्रदर्शन को कैसे दबाएं?


12

मैं एक विशिष्ट शब्द का उपयोग करके फाइलें खोजने की कोशिश कर रहा हूं grep। निर्देशिका में कई फाइलें हैं (> 500)

आज्ञा मैं चला

$ grep 'delete' *

उत्पादन

validate_data_stage1:0
validate_data_stage2:0
validate_data_stage3:0
validate_data_stage4:0
validate_data_stage5:0
validate_input_stage1:0
validate_input_stage2:0
validate_input_stage3:0
validate_input_stage4:0
.... and hundred of such lines

ये वो फाइलें हैं जिनमें दिए गए मैच नहीं हैं। मैं उन पंक्तियों को प्रदर्शित करने से लेकर स्टडआउट तक दबाना चाहता हूं। मुझे -qस्विच का पता है , लेकिन यह संपूर्ण आउटपुट को दबा देगा, जो मुझे नहीं चाहिए।

मैं उसको कैसे करू?


2
आम तौर पर, grepगैर-मिलान वाली फ़ाइलों के फ़ाइल नामों का प्रिंट आउट नहीं लेना चाहिए। वास्तव में, ऐसा लगता है कि मिलान करने grepवाली सामग्री के साथ एक पंक्ति मानता है 0। क्या आप उस सटीक खोज पैटर्न को पोस्ट कर सकते हैं जिसका आप उपयोग कर रहे हैं?
एड्रियन हेन

पूरा grep cmd मैंने इस्तेमाल किया था grep 'delete' * -R, लेकिन मुझे नहीं लगता कि -Rयह किसी भी समस्या का कारण है। और हाँ, यह आम तौर पर गैर-मिलान वाले लोगों को नहीं छापता है, लेकिन यह निश्चित नहीं है कि यहाँ क्या मामला है ...
mtk

@step @everyone .. अजीब ... ऊपर संपादित पोस्ट देखने के बाद। मैंने कोशिश की grep -- 'delete' *(जोड़ा --) और यह उम्मीद के मुताबिक काम किया। हटाने से --उपरोक्त प्रदर्शन में अग्रणी है।
एमटी

1
@Stephane वास्तव में आप सही हैं। मैंने dir खोजा ... और नाम के साथ एक फ़ाइल थी -ci। मुद्दे को हल करने के लिए धन्यवाद। आप इस परिदृश्य को उत्तर के रूप में पोस्ट कर सकते हैं।
13:22

जवाबों:


9

इसके द्वारा प्रदर्शित व्यवहार है grep -c

संभवतः आपके पास एक फ़ाइल है जिसका नाम शुरू होता है -और जिसमें एक cचरित्र होता है और आप POSIXLY_CORRECTपर्यावरण चर को सेट किए बिना GNU grep का उपयोग कर रहे हैं ।

उपयोग:

grep -- delete *

या और अच्छा:

grep delete ./*

--विकल्पों के अंत को चिह्नित करता है ताकि फ़ाइल नाम को विकल्प के रूप में नहीं माना जाएगा (POSIX grep के साथ, यह तब नहीं होगा क्योंकि गैर-विकल्प deleteतर्क ने विकल्पों के अंत को चिह्नित किया होगा), लेकिन यह समस्या की समस्या का समाधान नहीं करेगा नामक एक फ़ाइल -grep delete ./*और अधिक मजबूत है, लेकिन अतिरिक्त outputting की सबसे बड़ी खामी है ./मिलान फ़ाइलों के लिए (है कि हालांकि एक बोनस माना जा सकता है कि जब फ़ाइल नाम है कि न्यू लाइन वर्ण हो की पहचान में मदद करता है)।


13

जोड़ना

| grep -v ':0$'

बहुत सुंदर नहीं, लेकिन मुझे लगता है कि यह काम करेगा।

-lआपकी कमांड में जोड़ने से आपको केवल मैच मिलेंगे लेकिन यह प्रत्येक फ़ाइल के लिए मुद्रण संख्या के मैचों को भी दबा देगा।


1
-lकाम किया। काम के आसपास भी अच्छा है। धन्यवाद
एमटी

4
grep लाइन grep -v ':0$'केवल इतनी होनी चाहिए कि एक पंक्ति के अंत में मिलान किया जाता है (हालांकि, grep -lदृष्टिकोण तब तक बेहतर है जब तक आपको लाइन काउंट की आवश्यकता नहीं है)
mreithub

9

grep -lआप का उपयोग केवल उन फ़ाइलों को प्राप्त करेंगे जिनमें कम से कम एक मैच होता है।

क्या आपको इस बात की जानकारी चाहिए कि किसी फ़ाइल में कितने मैच हैं? क्योंकि आप उपयोग करना छोड़ सकते हैं -cजिसका उपयोग किसी फ़ाइल में मैचों की संख्या को गिनने के लिए किया जाता है।

संपादित करें: और जैसे वॉरलॉक ने -Iबाइनरी फाइलों में मैचों को दबाने के लिए उपयोग करना एक अच्छा विचार हो सकता है।


0

कैसे नॉनज़रो मायने रखता है:

grep -rIcH 'string' . | grep -v ':0$'

  • -r उपनिर्देशिकाएँ पुनर्जीवित करें।
  • -Iबाइनरी फ़ाइलों को अनदेखा करें (धन्यवाद @tongpu , warlock )
  • -cमैचों की गिनती दिखाएं। अनायास, 0-गिनती फ़ाइलें शामिल हैं।
  • -H फ़ाइल का नाम दिखाएं, भले ही केवल एक फ़ाइल हो।
  • 'string' आपका तार यहाँ जाता है।
  • . वर्तमान निर्देशिका से प्रारंभ करें।
  • | -v ':0$'0-गिनती फ़ाइलें निकालें। ( साभार @LaurentiuRoescu )

(मुझे पता है कि ओपी अनजाने-सी गिनती थी, लेकिन google (grep nonzero count) यहां की जमीनें)।


0

लॉरेंटियू के उत्तर के समान, आप -lgrep के लिए फ़ाइल इनपुट के रूप में लिस्टिंग का भी उपयोग कर सकते हैं :
grep -r "pattern" -c $(grep -rl "pattern")
यह grep के रंग को बनाए रखने की अनुमति देता है, लेकिन पृष्ठभूमि में एक ही काम करता है


ध्यान दें कि फ़ाइल नाम और निर्देशिका जिसमें कोई भी व्हाट्सएप या वाइल्डकार्ड है, गलती से विभाजित हो जाएगा और परिणामस्वरूप मेल खा जाएगा।
जेफ स्कालर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.