Jinsi ya kutumia amri ya "grep" kupata maandishi pamoja na subdirectories


Nenda kwa jibu lililokubaliwa


Ninataka kupata faili zote ambazo zina safu maalum ya maandishi. grep Amri kazi, lakini sijui jinsi ya kutumia ya kila directory (I inaweza tu kufanya hivyo kwa directory yangu ya sasa). Nilijaribu kusoma man grep , lakini haikua msaada wowote.


383





2011-08-01




Idadi ya majibu: 11


Itakuwa bora kutumia

 grep -rl "string" /path
 

wapi

  • -r (au --recursive ) chaguo hutumiwa kupitisha saraka zote ndogo za /path , ambapo
  • -l (au --files-with-matches ) chaguo hutumiwa kuchapa tu majina ya faili ya faili zinazolingana, na sio mistari inayolingana (hii inaweza pia kuboresha kasi, ikizingatiwa kwamba grep kuacha kusoma faili mwanzoni na chaguo hili).

507


2011-08-01

Ikiwa unatafuta mistari inayofanana katika faili, amri yangu ninayopenda ni:

 grep -Hrn 'search term' path/to/files
 
  • -H husababisha jina la faili kuchapishwa (inaashiria wakati faili nyingi hutafutwa)
  • -r hufanya utaftaji
  • -n husababisha nambari ya kuchapishwa

path/to/files inaweza kuwa . kutafuta katika saraka ya sasa

Chaguzi zaidi ambazo naona zinafaa sana:

  • -I puuza faili za binary (inayosaidia: -a kutibu faili zote kama maandishi)
  • -F kutibu search term kama sauti halisi, sio usemi wa kawaida
  • -i fanya utaftaji wa kutojali
  • --color=always kulazimisha rangi hata wakati wa bomba kupitia less . Ili kufanya less rangi ya msaada, unahitaji kutumia -r chaguo:

     grep -Hrn search . | less -r
     
  • --exclude-dir=dir muhimu kwa kuwatenga saraka kama .svn na .git .


Mfano wa mazao


173


2011-08-01

Naamini unaweza kutumia kitu kama hiki:

 find /path -type f -exec grep -l "string" {} \;
 

Maelezo kutoka kwa maoni

find ni amri inayokuruhusu kupata faili na vitu vingine kama saraka na viungo kwenye subdirectories ya njia iliyopeanwa. Ikiwa hautaja mask ambayo faili za maneno zinapaswa kukutana, inasisitiza vitu vyote vya saraka.

  • -type f inabainisha kuwa inapaswa kusindika faili tu, sio saraka nk.
  • -exec grep inabainisha kuwa kwa kila faili inayopatikana, inapaswa kuendesha amri ya grep, kupitisha jina lake la faili kama hoja kwake, kwa kuchukua nafasi {} ya jina la faili

24


2011-08-01

Amri yangu ya msingi ni

 grep -Rin string *
 

Ninatumia capitol 'R' kwa sababu ls hutumia kujirudia. Kwa kuwa grep inakubali zote mbili, hakuna sababu ya kutoitumia.

BONYEZA: kwa HVNSwashiti, dhahiri -R itafuata ulinganifu ambapo hautafanya -r .


20


2011-08-01

Ikiwa uko tayari kujaribu kitu kipya, toa ack risasi. Amri ya kutafuta upya saraka ya sasa string ni:

 ack string
 

Ufungaji ni rahisi sana:

 curl http://betterthangrep.com/ack-standalone > ~/bin/ack && chmod 0755 !#:3
 

(Isipokuwa umeshapata saraka ~/bin na ni bora kwako PATH .)


12


2011-08-01

Rgrep ya amri imewekwa kwa hitaji kama hilo

Ikiwa haipatikani, unaweza kuipata kama hii

 mkdir -p ~/bin
cd ~/bin
wget http://sdjf.esmartdesign.com/files/rgrep
chmod +x rgrep
 

Unaweza kuweka moja kwa moja kwenye chaguzi zako chaguo graf kama ilivyoelezwa hapo juu.

Mimi hutumia mtu

 [[  ${#args} -lt 5 && "${args//[[:space:]]/}" == "-i" ]] && args="-Hin"
args="${args:--Hns} --color=auto"
 

mada inayohusiana: jinsi ya kutumia rgrep kila wakati na rangi


4


2015-01-02

Sasisha 2:

Mistari hii ya amri inayotumia find na grep kurekebisha shida:

 $ find path_to_search_in -type f -exec grep -in searchString {} 2> /dev/null +
 

--color=<always or auto> kwa mazao ya rangi:

 $ find path_to_search_in -type f \
            -exec grep --color=always -in searchString {} 2>/dev/null +
 

Mfano:

 $ find /tmp/test/ -type f -exec grep --color=auto -in "Search string" {} 2>/dev/null +
 

Mfano unaendeshwa kwenye picha hapo chini:
snap1


Sasisha 1:

Unaweza kujaribu kufuata nambari; kama kazi katika yako .bashrc au .bash_aliases kwa hati:

 wherein () 
{ 
    for i in $(find "$1" -type f 2> /dev/null);
    do
        if grep --color=auto -i "$2" "$i" 2> /dev/null; then
            echo -e "\033[0;32mFound in: $i \033[0m\n";
        fi;
    done
}
 

Matumizi: wherein /path/to/search/in/ searchkeyword

mfano:

 $ wherein ~/Documents/ "hello world"
 

(Kumbuka: Kama inavyopendekezwa katika maoni hapa chini na @enzotib, hii haifanyi kazi na faili / saraka ikiwa pamoja na nafasi katika majina yao.)


Chapisho la asili

Kutafuta kamba na matokeo ya mstari huo na kamba ya utaftaji:

 $ for i in $(find /path/of/target/directory -type f); do \
    grep -i "the string to look for" "$i"; done
 

mfano:

 $ for i in $(find /usr/share/applications -type f); \
    do grep -i "web browser" "$i"; done
 

Ili kuonyesha jina la faili iliyo na kamba ya utaftaji:

 $ for i in $(find /path/of/target/directory -type f); do \
    if grep -i "the string to look for" "$i" > /dev/null; then echo "$i"; fi; done;
 

mfano:

 $ for i in $(find /usr/share/applications -type f); \
    do if grep -i "web browser" "$i" > /dev/null; then echo "$i"; \
    fi; done;
 

2


2014-01-25

grep ( GNU au BSD )

Unaweza kutumia grep zana kutafuta mara kwa mara folda ya sasa na -r parameta, kama:

 grep -r "pattern" .
 

Kumbuka: -r - Tafuta hivi karibuni subdirectories.

Kutafuta faili maalum, unaweza kutumia syntax ya kutuliza kama vile:

 grep "class foo" **/*.c
 

Kumbuka: Kwa kutumia chaguo la kufurahisha ( ** ), inakataza faili zote kwa kurudiwa na ugani au muundo maalum. Ili kuwezesha syntax hii, endesha : shopt -s globstar . Unaweza kutumia pia **/*.* faili zote (ukiondoa siri na bila ugani) au muundo wowote.

Ikiwa unayo hitilafu kwamba hoja yako ni ndefu sana, fikiria kupunguza utaftaji wako, au tumia find syntax badala kama vile:

 find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'
 

Vinginevyo tumia ripgrep .

ripgrep

Ikiwa unafanya kazi kwenye miradi mikubwa au faili kubwa, unapaswa kutumia ripgrep badala yake, kama:

 rg "pattern" .
 

Angalia hati, hatua za usanikishaji au msimbo wa chanzo kwenye ukurasa wa mradi wa GitHub .

Ni wepesi sana kuliko chombo nyingine yoyote kama GNU / BSD grep , ucg , ag , sift , ack , pt au zinazofanana, kwa vile ni kujengwa juu ya Kutu injini regex inayotumia finite automata, SIMD na fujo uimarishaji halisi kufanya utafutaji kwa kasi sana.

Inasaidia kupuuza mifumo iliyoainishwa katika .gitignore faili, kwa hivyo njia moja ya faili inaweza kuendana dhidi ya mifumo nyingi za kinga wakati huo huo.


Unaweza kutumia vigezo vya kawaida kama vile:

  • -i - Kutafakari.
  • -I - Puuza faili za binary.
  • -w - Tafuta maneno yote (kinyume na sehemu ya kulinganisha maneno).
  • -n - Onyesha mstari wa mechi yako.
  • -C / --context (k. -C5 ) - Huongeza muktadha, kwa hivyo unaona msimbo unaozunguka.
  • --color=auto - Weka alama kwenye maandishi yanayolingana.
  • -H - Inaonyesha jina la faili ambapo maandishi hupatikana.
  • -c - Maonyesho ya hesabu ya mistari inayolingana. Inaweza kuunganishwa na -H .

2


2018-04-11

Mimi hufanya hivyo kwa kutumia xargs, amri iliyowekwa chini sana

 find ./ -type f -print0 | xargs -0 grep 'string_you_are_looking_for'
 

kupata ./ inakupa orodha inayorudisha ya faili zote kwenye folda ya sasa kisha unayipigia kwa xargs zinazotekeleza amri ya grep kwa kila moja ya faili hizo.


1


2011-08-01

Najua kuna majibu mengi hapa, lakini hapa kuna njia mbadala ikiwa ungetaka kuongeza vizuizi vingine unapotafuta faili:

 find . -type f -exec grep --quiet string_to_look_for {} ';' -print
 

Hii inafanya kazi kwa sababu grep itarudi 0 ikiwa ilipata matokeo, 1 vinginevyo. Kwa mfano unaweza kupata faili 1 MB kubwa na zenye kitu:

 find . -type f -exec grep --quiet string_to_look_for {} ';' -size 1M -print
 

Kwa mahitaji mengi labda unataka kutumia bendera ya optimizer -O ambayo inapatikana katika GNU grep.


0


2015-03-11

Hati (kupata-katika-msimbo) ya kutafuta kwenye C, msimbo wa CPP:

 #!/bin/sh

find . \( -iname "*.c" -o -iname "*.cpp" -o -iname "*.h" \) -type f -print0 | xargs -0 grep --color -n "$1"
 

Tumia:

 find-in-code "search string"
 

0


2015-06-11