grep-komennon '^'-merkki

    Osaisiko joku kertoa, miksei esimkerkiksi seuraava säännönmukainen lauseke toimi:

"^[[:space:]]{1,}[^[:digit:]]"

Eli haun pitäisi (mielestäni) täsmätä riveihin, joiden alussa on tyhjää vähintään yhden merkin verran (tabulaattori tai välilyönti), jonka jälkeen ei tule numeerista merkkiä (0-9).

Ongelma on siinä, ettei grep tai egrep tulkitse ^-merkkiä siten, että alun tyhjätilan jälkeen numerolla jatkuvat rivit suodatettaisiin pois. Haluamani tuloksen saa kuitenkin aikaan jos lopun "[^[:digit:]]" vaihtaa vaikkapa "[[:alpha:]]" tai "[a-zA-Z]". Eli lausekkeiden merkityshän on silti loogisesti sama "ei täsmää numeroihin" ja "täsmää vain kirjaimiin" (olettaen tietenkin, että jätetään muut merkit kuin numerot ja kirjaimet huomioimatta).

Silti, minua vainoaa tuo ^-merkki! Olenkohan nyt ymmärtänyt sen merkityksen väärin? Osaisiko joku kenties viisaampi sanoa, miksi en saa oikeaa tulosta kun manuaali-sivuja luettuanikin ymmärrykseni mukaan lausekkeen pitäisi toimia.
4308
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

Äkkiseltäöän katsottuna toi näyttää siltä, että jos ekan tyhjän merkin jälkeen on seuraavana merkkinä numero, niin sillon se rivi suodatetaan pois. Jos rivin alussa on useampi tyhjä ja sitten numero, niin riviä ei suodateta.

Hamppi kiukuttelee sen verta äkäsesti, etten jaksa just nyt miettiä enempi..

Äänestä

Nyt kun tota kattelen tarkemmin, niin musta sen haluamasi jutun pitäs olla just noin kun olet kirjottanut.. Mikähän ihme tossa on..

Äänestä

Kokeiles ajaa 'grep -E' eli extended regular expressions.

Äänestä
  • Sen verran tuossa ehdossa taitaa olla vikaa, että se suodattaa:

    ' 123' rivin pois, mutta ei
    ' 123' riviä

    Joutunet kuitenkin tekemään lauseen muotoon:

    "^[[:space:]] [[:alpha:]]"

    Äänestä

Kommentoi aloitusta


minä kirjoitti:

    Osaisiko joku kertoa, miksei esimkerkiksi seuraava säännönmukainen lauseke toimi:

"^[[:space:]]{1,}[^[:digit:]]"

Eli haun pitäisi (mielestäni) täsmätä riveihin, joiden alussa on tyhjää vähintään yhden merkin verran (tabulaattori tai välilyönti), jonka jälkeen ei tule numeerista merkkiä (0-9).

Ongelma on siinä, ettei grep tai egrep tulkitse ^-merkkiä siten, että alun tyhjätilan jälkeen numerolla jatkuvat rivit suodatettaisiin pois. Haluamani tuloksen saa kuitenkin aikaan jos lopun "[^[:digit:]]" vaihtaa vaikkapa "[[:alpha:]]" tai "[a-zA-Z]". Eli lausekkeiden merkityshän on silti loogisesti sama "ei täsmää numeroihin" ja "täsmää vain kirjaimiin" (olettaen tietenkin, että jätetään muut merkit kuin numerot ja kirjaimet huomioimatta).

Silti, minua vainoaa tuo ^-merkki! Olenkohan nyt ymmärtänyt sen merkityksen väärin? Osaisiko joku kenties viisaampi sanoa, miksi en saa oikeaa tulosta kun manuaali-sivuja luettuanikin ymmärrykseni mukaan lausekkeen pitäisi toimia.

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