Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Mistofelees - 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.
-
Itse lähtisin ratkaisemaan ongelmaa putkittamalla.
grep jono1| grep jono2|grep -ve jonoM
tuohon se ajatus sitten katkesikin :)
mutta saisikohan tuolla putkituksella homman ratkaistua?
-
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.
-
Tiedostonimien kaiveluun grepillä tarvitset -l tai -L parametrejä (osumat tai hudit). Esim.
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.
grep -lr blondi /var/www/* |grep -l DD
etsisi merkkijonoa "DD" 1. vaiheessa löytyneiden tiedostojen nimistä.
Jos halutaan etsiä tiedostojen sisällöstä, on käytettävä xargs apuohjelmaa.
grep -lr blondi /var/www/* |xargs grep -l DD
Negatiivisen ehdon (and not) saa lisättyä käyttäen -L-parametria (tulostaa hudit).
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).
grep -lrZ blondi /var/www/* |xargs -0 grep -lZ DD |xargs -0 grep -L naimisissa
Viimeisestä grep komennosta puuttuu -Z tulosten selvyyden takia.
Ps. Äkkiseltään voisi kuvitella että kaipaamasi tapaiseen toimintoon on valmiita cgi-scriptejä.