Kirjoittaja Aihe: ?: merkkijonojen haku tiedostoista  (Luettu 1634 kertaa)

Mistofelees

  • Käyttäjä
  • Viestejä: 641
    • Profiili
?: merkkijonojen haku tiedostoista
« : 14.03.11 - klo:16.15 »
Tarvitsisin jonkun hyvän tempun, jolla voisi tiedostoista hakea merkkijonoja hieman perus-grep:ä fiksummin.
Ainahan tuollaisen voisi vääntää Perlillä tai PHP:llä, mutta koitan välttää pyörän uudelleen keksimistä.

Tälläista etsin:
- " hae tiedostot, joissa on jono1 JA jono2 JA...JA jonoM mutta EI jonoN.. EI jonoR".

Tulokseksi riittäisi tiedostojen nimet.

Jiku

  • Käyttäjä
  • Viestejä: 248
    • Profiili
Vs: ?: merkkijonojen haku tiedostoista
« Vastaus #1 : 15.03.11 - klo:10.53 »
Itse lähtisin ratkaisemaan ongelmaa putkittamalla.
grep jono1| grep jono2|grep -ve jonoM

tuohon se ajatus sitten katkesikin :)
mutta saisikohan tuolla putkituksella homman ratkaistua?
Puoliksi suunniteltu on hyvin tehty

Mistofelees

  • Käyttäjä
  • Viestejä: 641
    • Profiili
Vs: ?: merkkijonojen haku tiedostoista
« Vastaus #2 : 16.03.11 - klo:09.55 »
Itse lähtisin ratkaisemaan ongelmaa putkittamalla.
grep jono1| grep jono2|grep -ve jonoM

tuohon se ajatus sitten katkesikin :)
mutta saisikohan tuolla putkituksella homman ratkaistua?

Tuo tuntuu tällä hetkellä ainoalta mahdollisuudelta. PHP:llä tarvittavan komennon rakentaminen saa vielä hilseen pöllyämään, mutta eipä ole ensimmäinen kerta.
Taustana on, että rakensin html ohjelman, joka käyttää SQL:n tilalla hakemistopuuta opaste-dokumenttien järjestelyyn. Nyt asiakkaan pitäisi pystyä etsimään noista txt-dokumenteistä 1-3 sanan hakuavaimilla tietoja.

retu

  • Käyttäjä
  • Viestejä: 949
    • Profiili
Vs: ?: merkkijonojen haku tiedostoista
« Vastaus #3 : 16.03.11 - klo:10.53 »
Tiedostonimien kaiveluun grepillä tarvitset -l tai -L parametrejä (osumat tai hudit). Esim.
Koodia: [Valitse]
grep -lr blondi /var/www/*hakee hakemiston /var/www alta tiedostoa jossa esiintyy sana blondi ja tulostaa kaikkien löytyneiden tiedostojen nimet.

Toisen hakuehdon lisääminen putkittamalla tulokset grepille ei kuitenkaan toimi.
Koodia: [Valitse]
grep -lr blondi /var/www/* |grep -l DDetsisi merkkijonoa "DD" 1. vaiheessa löytyneiden tiedostojen nimistä.

Jos halutaan etsiä tiedostojen sisällöstä, on käytettävä xargs apuohjelmaa.
Koodia: [Valitse]
grep -lr blondi /var/www/* |xargs grep -l DD
Negatiivisen ehdon (and not) saa lisättyä käyttäen -L-parametria (tulostaa hudit).
Koodia: [Valitse]
grep -lr blondi /var/www/* |xargs grep -l DD |xargs grep -L naimisissa
Jos tiedostojen nimissä voi olla välilyöntejä, listauksissa on käytettävä erottimena NUL merkkiä rivinvaihdon sijaan (grep -Z parametri, xargs -0 parametri).
Koodia: [Valitse]
grep -lrZ blondi /var/www/* |xargs -0 grep -lZ DD |xargs -0 grep -L naimisissaViimeisestä grep komennosta puuttuu -Z tulosten selvyyden takia.

Ps. Äkkiseltään voisi kuvitella että kaipaamasi tapaiseen toimintoon on valmiita cgi-scriptejä.