greppi-komennossa jotain vikaa

Tossa piti käyttää grep-komentoa ja putkittaa cut-komento sen perään, mutta nyt komennossa on jotain vikaa. Eli eräästä serverin hakemistosta pitäisi tonkia tiedostoja, joisa esiintyy eräs merkkijono, olkoot se nyt esimerkkinä perinteinen "Matti Meikalainen".

Komento on seuraava:
grep -i "Matti Meikalainen" *|cut -f1 -d:|uniq

ja tuloksena seuraava virheilmoitus:
bash: /bin/grep: Argument list too long

En tajua mikä tuossa nyt on vikana, kun en ole paljoa noita komentoja käytellyt. Mikä siinä komennossa siis on liikaa?
13568
Äänestä

Muut lukivat myös

Vastaukset 13

Vanhimmat

omituista ettei toimi. mulla nimittäin toimii tuo ihan ok.
tein pari tiedostoa jossa haettava teksti on ja ajoin sitten skriptin.

$ grep --version
GNU grep 2.5.3

Äänestä
  • grep (GNU grep) 2.5.1

    Johtusko tuosta?

    Äänestä

  • ei-linux-asiantuntija kirjoitti:

    grep (GNU grep) 2.5.1

    Johtusko tuosta?

    Mulla on sama grep versio ja ei anna virheilmoitusta. Ja toimii kummallakin tavalla mitä aikasemmin kirjotin.

    Teeppä korjausasennus grepille.

    Äänestä

  • Wolf kirjoitti:

    Mulla on sama grep versio ja ei anna virheilmoitusta. Ja toimii kummallakin tavalla mitä aikasemmin kirjotin.

    Teeppä korjausasennus grepille.

    En itse lähde asentelemaan. Pirautan adminille. Mikä tuon grepin voisi sitten rikkoa? Outoa..

    Sain hommani eteenpäin Windowsin työkaluilla, kun tuo arkisto on servulla. Kopsasin sen arkistopaketin ja purin työpisteelle.

    Äänestä

Lisää muutama välilyönti?

Ei näin:
grep -i "Matti Meikalainen" *|cut -f1 -d:|uniq

Vaan näin:
grep -i "Matti Meikalainen" * | cut -f1 -d: | uniq

Äänestä
  • Kiitos, mutta ei toiminut. Edelleen tuo sama virhe tulee.

    Äänestä

Onkohan tämä RedHatti menny rikki, kun aiemmin kaiffarit ovat pystyneet käyttämään tuota hakukomentoa? Duunissa tätä tarvitaan silloin tällöin, kun joutuu jotain arkistoja kaivelemaan.

Käyttöoikeuksilla ei pitäisi varmaan olla merkitystä. Olen nyt superuserina ja yritän ajaa tuota komentoa, tuloksetta.

Äänestä
  • ls | xargs grep -i 'test' | cut -f2 -d: | uniq

    Äänestä

  • >Onkohan tämä RedHatti menny rikki...

    Ei ole vaan komennnon käyttökohde on muuttunut, Sana juttu niillä joilla komento nytkin toimii eli sitä ajetaan pienemmällö datamäärällä.

    Grepin argumenttilista on muutamia tuhansia, en nyt muista ihan tarkkaan, mutta tämä on tiedossa oleva tilanne ja konstikin löytyy.

    Googleta hakusanoilla find grep xargs niin löydät ohjeet.

    Äänestä

  • debbiestar kirjoitti:

    ls | xargs grep -i 'test' | cut -f2 -d: | uniq

    Tuo komento toimii, mutta se palauttaa vain tuon haetun merkkijono. Pitäisi siis palauttaa ne tiedostot, joiden sisällössä on tuo haettu merkkijono.

    Äänestä

  • ei-linux-asiantuntija kirjoitti:

    Tuo komento toimii, mutta se palauttaa vain tuon haetun merkkijono. Pitäisi siis palauttaa ne tiedostot, joiden sisällössä on tuo haettu merkkijono.

    >Pitäisi siis palauttaa ne tiedostot...

    Et siis jaksanut lukea tuota seuraavaa ohjetta? ;)

    Minä kun en ole ilkeä ihminen niin tein sen puolestasi ja löysin seuraavaa:

    Versiosta 2.6.23 lähtien kernelistä on poistettu ARG_MAX-rajoitus niin että komentosi toimii sellaisenaan.

    http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b6a2fea39318e43fee84fa7b0b90d68bed92d2ba

    Siihen asti se pitää kiertää find/xargsilla eli menee jotenkin näin:

    find . -type f -print0 | xargs -0 grep -i "Matti Meikalainen" |cut -f1 -d:|uniq

    Äänestä

  • on monet. kirjoitti:

    >Pitäisi siis palauttaa ne tiedostot...

    Et siis jaksanut lukea tuota seuraavaa ohjetta? ;)

    Minä kun en ole ilkeä ihminen niin tein sen puolestasi ja löysin seuraavaa:

    Versiosta 2.6.23 lähtien kernelistä on poistettu ARG_MAX-rajoitus niin että komentosi toimii sellaisenaan.

    http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b6a2fea39318e43fee84fa7b0b90d68bed92d2ba

    Siihen asti se pitää kiertää find/xargsilla eli menee jotenkin näin:

    find . -type f -print0 | xargs -0 grep -i "Matti Meikalainen" |cut -f1 -d:|uniq

    Ei kerkeä lukemaan kaikkea, varsinkaan jos dokumentissa jaaritellaan niitä näitä ja se haettava tieto on siellä jossain parin sivun takana ;)

    No joo, jospa nyt kerkeisi paneutumaan paremmin kun tuo asia on jo hoidettu muilla tavoin. Kokeilen tuota antamaasi komentoa.

    Kiitos kuitenkin! Hyvä että välillä törmää asiallisiin henkilöihin :)

    Äänestä

Vaikuttais siltä että tiedostoja on todella paljon. Voit poistaa ongelman syöttämällä tiedostot esim. findilla.


find . -name "*" -exec

Äänestä

Ketjusta on poistettu 3 sääntöjenvastaista viestiä.

Kommentoi aloitusta


ei-linux-asiantuntija kirjoitti:

Tossa piti käyttää grep-komentoa ja putkittaa cut-komento sen perään, mutta nyt komennossa on jotain vikaa. Eli eräästä serverin hakemistosta pitäisi tonkia tiedostoja, joisa esiintyy eräs merkkijono, olkoot se nyt esimerkkinä perinteinen "Matti Meikalainen".

Komento on seuraava:
grep -i "Matti Meikalainen" *|cut -f1 -d:|uniq

ja tuloksena seuraava virheilmoitus:
bash: /bin/grep: Argument list too long

En tajua mikä tuossa nyt on vikana, kun en ole paljoa noita komentoja käytellyt. Mikä siinä komennossa siis on liikaa?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu