लिनक्स में एक पाठ पैटर्न के लिए खोजें


20

मैं एक linux नौसिखिया हूँ। मुझे सभी * .java फ़ाइलों के तहत / home / user1 / (सबफ़ोल्डर्स सहित) में आने वाली एक स्ट्रिंग "टेस्टस्ट्रिंग" की खोज करने की आवश्यकता है। मैं इसे शेल कमांड के माध्यम से लिनक्स में कैसे कर सकता हूं।


कमांड लाइन से उपनिर्देशिकाओं में रेगेक्स खोज फाइलों के बारे में कई सवाल किए गए हैं
रोबॉटहूमन

एक त्वरित खोज ने इस प्रश्न को बदल दिया: superuser.com/questions/208271/… ठीक वही नहीं जो आप ढूंढ रहे हैं, बल्कि निष्पादन cp के बजाय आप बिल्ली कर सकते हैं / grep जो भी कर सकते हैं
रोबोट '28

मैं फाइल को लिस्ट / घर / user1 -name * के साथ एक्सटेंशन में सूचीबद्ध कर सकता हूं। * जावा उस पर grep का उपयोग कैसे करें?
दारवत्दर

जवाबों:


23

सबसे आसान तरीका GNU grep की विशेषताओं का उपयोग करना है:

grep -r --include '*.java' teststring /home/user1

यदि आप कभी किसी अन्य यूनिक्स संस्करण पर होते हैं जिसमें GNU grep नहीं है, तो यहाँ एक पोर्टेबल तरीका है:

find /home/user1 -name '*.java' -exec grep teststring {} +

इस grep फ़ीचर के बारे में अच्छा नहीं पता था
रोबॉटहैंस

1
यदि आप वर्तमान डायर और सभी फाइलों को खोज रहे हैंgrep -r teststring .
क्रिस मोशचिनी


4

इस ack उर्फ ack-grep के लिए मेरे मन में हत्यारा ऐप;)

आप पाथ_ में कुछ_स्ट्रिंगack some_string /in/path_y ढूंढ सकते हैं या वर्तमान डायर में some_other_sting खोजने के लिए सरल ।ack some_other_string


2

मिल गया। पोस्टिंग के रूप में यह किसी की मदद कर सकता है।

find /home/user01 -name *.java | xargs grep "teststring"

अगर कोई बेहतर तरीका है तो कृपया सही करें।


3
आमतौर पर, आप का उपयोग करना चाहिए -print0और -0जब पाइप findमें xargsठीक से फ़ाइलें उनके नाम में रिक्त स्थान या नई-पंक्तियों हो सकता है के साथ काम करने के लिए:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
अगली सूचना तक रोका गया।

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