सवाल एक टेक्स्ट फ़ाइल कैसे खोजें जिसमें एक विशिष्ट शब्द शामिल है (इसके नाम पर नहीं)


मैं अपनी हार्ड डिस्क में एक टेक्स्ट फ़ाइल ढूंढना चाहता हूं जिसमें एक विशिष्ट शब्द है।

उबंटू से पहले 12.4 मैं डैश में एक एप्लिकेशन शुरू करना चाहता था, मुझे लगता है कि इसे "फाइल के लिए खोजें ..." कहा जाता था, जिसका आइकन एक आवर्धक ग्लास था। मुझे अब इतना आसान एप्लिकेशन नहीं मिल रहा है।


97
2018-04-29 16:40


मूल




जवाब:


आप इसका उपयोग कर सकते हैं grep टर्मिनल से कमांड:

 grep -r word *

इस कमांड को मौजूदा निर्देशिका (या उप-निर्देशिका) के तहत सभी फ़ाइलों में "शब्द" की सभी घटनाएं मिलेंगी।


161
2018-04-29 16:48



उन्होंने विशेष रूप से एक गुई विधि का उल्लेख किया;) - Rinzwind
तारांकन छुपी हुई फाइलों से मेल नहीं खाता है। उन सभी फ़ाइलों को खोजने के लिए जिन्हें आप चला सकते हैं grep -r word .। - Ian Mackinnon
@Rinzwind: शीर्षक में नहीं! मैं फाइलों के अंदर शब्दों को खोजने के लिए कंसोल तरीके के लिए googling आया, तो यह जवाब मेरे लिए सही है! - Nikolay Ivanov
टर्मिनल में एक गुई है ... यह सिर्फ एक गुई है कि आप चीजों को टाइप करते हैं :- डी - billynoah
यह गुई के कारण स्वीकार्य उत्तर नहीं हो सकता है, लेकिन यह वास्तव में सही जवाब है :) - inquisitive


Gnome-search-tool इंस्टॉल करें।

sudo apt-get install gnome-search-tool

खुला Search for files चुनते हैं Select More Options तथा


enter image description here


63
2018-04-29 16:48



क्या आपको इसे काम करने के लिए ओएस को पुनरारंभ करना होगा? या शायद यह 12 में काम नहीं करता है? - jcollum
क्या आपने भाग स्थापित किया है? मुझे पूरा यकीन है कि इसे काम करना चाहिए, यह 13.04 पर काम करता है। - hingev
which gnome-search-tool = /usr/bin/gnome-search-tool... लेकिन जब मैं gnome में खोज विकल्प खोलता हूं (जाओ, फ़ाइलों के लिए खोजें ...) "अधिक विकल्प चुनें" के लिए कोई विकल्प नहीं है - jcollum
टर्मिनल में टाइप करके खोलें: gnome-search-tool और मुझे यकीन है कि आप इसे देखेंगे। - hingev
आप डैश "फाइलों के लिए खोजें" के माध्यम से gnome-search-tool लॉन्च कर सकते हैं, इसलिए आपको टर्मिनल की आवश्यकता नहीं है। - Bernard Decock


सवाल काफी पुराना है ... वैसे भी ... वर्तमान में (2016) एक gnome ऐप कहा जाता है tracker (आप इसे उबंटू रिपॉजिटरीज़ में पा सकते हैं) जिन्हें फ़ाइलों के अंदर टेक्स्ट खोजने के लिए इंस्टॉल किया जा सकता है (odt-ods-odp-pdf की कोशिश की)। पैकेज को स्थापित करने के लिए 4 अन्य पैकेजों के साथ आता है (ट्रैकर-निकालने, ट्रैकर-गुई, ट्रैकर-माइनर-एफएस, ट्रैकर-यूटिल) नमस्ते :)


4
2018-01-14 00:11



ट्रैकर अच्छा सॉफ़्टवेयर है, लेकिन इसके लिए इंडेक्स को उस फ़ाइल के बारे में जानकारी पहले से ही शामिल करनी होगी, जिसे आप खोज के साथ हिट करना चाहते हैं। यह रिकॉल से कम संसाधनों का उपयोग करता है, मुझे इंडेक्स आकार के बारे में निश्चित नहीं है। लेकिन अगर आपको एक विशिष्ट पाठ के साथ फ़ाइल खोजने की आवश्यकता है और इसे गुई के साथ करना चाहते हैं, तो gnome-search-tool किसी इंडेक्स के बिना समस्या हल करता है। यह पिछले उबंटू संस्करणों में एक डिफ़ॉल्ट ऐप था, मुझे नहीं पता कि उन्होंने बिना किसी प्रतिस्थापन के इसे हटा दिया। - Hatoru Hansou


हां, मुझे पता है कि आप गुई आवेदन की तलाश में थे और यह पुरानी पोस्ट है, लेकिन शायद यह किसी की मदद करेगी। मुझे एके-जीईपी उपयोग मिला। पहले इसे के माध्यम से स्थापित करें sudo apt-get install ack-grep और फिर आदेश चलाएँ ack-grep what_you_looking_for निर्देशिका में जहां आप खोज चाहते हैं। यह आपको सभी फाइलें दिखाता है जिसमें आपका टेक्स्ट है और यह भी फाइलों से पूर्वावलोकन दिखाता है। और यह मेरे लिए इतना महत्वपूर्ण है।


2
2018-02-25 10:38





यहां विभिन्न विधियों का एक अवलोकन है जिसका उपयोग पाठ के विशिष्ट तारों के लिए फ़ाइलों को खोजने के लिए किया जा सकता है, कुछ विशेष रूप से केवल टेक्स्ट फ़ाइलों के साथ काम करने के लिए जोड़ा गया है, और बाइनरी / एप्लिकेशन फ़ाइलों को अनदेखा कर दिया गया है।

हालांकि, किसी को ध्यान रखना चाहिए कि शब्द खोजना थोड़ा जटिल हो सकता है, क्योंकि अधिकांश लाइन-मिलान करने वाले टूल लाइन पर कहीं भी एक शब्द खोजने का प्रयास करेंगे। यदि हम स्ट्रिंग के रूप में किसी शब्द के बारे में बात कर रहे हैं जो रेखा की शुरुआत या अंत में, या लाइन पर अकेले, या रिक्त स्थान और / या विराम चिह्न से घिरा हुआ हो सकता है - तब जब हमें नियमित अभिव्यक्तियों की आवश्यकता होगी, और विशेष रूप से आने वाले लोग पर्ल से यहां, उदाहरण के लिए, हम इसका उपयोग कर सकते हैं -P में grep इसके चारों ओर पर्ल नियमित अभिव्यक्तियों का उपयोग करने के लिए।

$ printf "A-well-a don't you know about the bird?\nWell, everybody knows that the bird is a word" | grep -noP '\bbird\b'                                               
1:bird
2:bird

सरल grep

$ grep -rIH  'word'
  • -r वर्तमान निर्देशिका से रिकर्सिव खोज के लिए
  • -I बाइनरी फाइलों को नजरअंदाज करने के लिए
  • -H आउटपुट फ़ाइल नाम जहां मिलान मिलता है

केवल खोज के लिए उपयुक्त है।

+ grep खोजें

$ find -type f -exec grep -IH 'word' {} \;
  • find रिकर्सिव खोज भाग करता है
  • -I विकल्प बाइनरी फाइलों को अनदेखा करना है
  • -H फाइलनाम को आउटपुट करने के लिए जहां लाइन मिलती है
  • सबहेल के भीतर अन्य आदेशों के साथ संयोजन के लिए अच्छा दृष्टिकोण, जैसे:

    $ find -type f -exec sh -c 'grep -IHq "word" "$1" && echo "Found in $1"' sh {} \;
    

पर्ल

#!/usr/bin/env perl
use File::Find;
use strict;
use warnings;

sub find_word{
    return unless -f;
    if (open(my $fh, $File::Find::name)){
        while(my $line = <$fh>){
            if ($line =~ /\bword\b/){
                printf "%s\n", $File::Find::name;
                close($fh);
                return;
            }
        }
    }
}

# this assumes we're going down from current working directory
find({ wanted => \&find_word, no_chdir => 1 },".")

रिकर्सिव बैश स्क्रिप्ट में गरीब-मन्स रिकर्सिव grep

यह "बैश रास्ता" है। आदर्श नहीं है, शायद आपके पास इसका उपयोग करने का कोई अच्छा कारण नहीं है grep या perl स्थापित।

#!/usr/bin/env bash
shopt -s globstar
#set -x
grep_line(){
    # note that this is simple pattern matching 
    # If we wanted to search for whole words, we could use
    # word|word\ |\ word|\ word\ )
    # although when we consider punctuation characters as well - it gets more
    # complex
    case "$1" in
        *word*) printf "%s\n" "$2";;
    esac
}
readlines(){
    #  line count variable can be used to output on which line match occured

    #line_count=1
    while IFS= read -r line;
    do
        grep_line "$line" "$filename"
        #line_count=$(($line_count+1))
    done < "$1"
}

is_text_file(){
    # alternatively, mimetype command could be used
    # with *\ text\/* as pattern in case statement
    case "$(file -b --mime-type "$1")" in
        text\/*) return 0;;
        *) return 1;;
    esac
}

main(){
    for filename in ./**/*
    do
        if [ -f "$filename" ] && is_text_file "$filename"
        then
            readlines "$filename"
        fi
    done
}
main "$@"

2
2017-11-11 18:00





यहां तक ​​कि सरल और तेज़ "चांदी खोजकर्ता" है sudo apt-get install silversearcher-ag। पर एक नज़र डालें https://github.com/ggreer/the_silver_searcher पुनर्मिलन के लिए यह दूसरों के बीच एक * से बेहतर क्यों है।


0
2018-02-08 16:52