Useasti tartten regexp-lauseessa ehtoa, että haetaan merkkijonoa, jossa ei esiinny jotain toista merkkijonoa. Otetaan nyt tämänaamuinen ongelma esimerkiksi: etsin kaikkia php-tiedostoja, mutta ei niitä, jotka ovat hakemistossa 'foo'. Eli varmaan ihan simppeli perusjuttu, mutta nämä regexpit eivät ole ikinä olleet se vanhvin puoleni.
find | grep -P "(foo\/?)(.*)(\.php)$"
Ei aukene niin ei aukene :(
grep:ssä on parametri:
-v, --invert-match
find | grep -vP "foo/" | grep -P "php$"
Ei välttämättä mene ihan oikein mutta tuohon tyyliin
eli eka grep päästää läpi kaikki rivit paitsi missä on foo/
ja tokassa näistä jäljelle jääneistä matchataan php päättyvät rivit.
Kiitokset tuosta -v:stä. Tuolla saan todennäköisesti tuon aamuisen ongelmani ratkaistua, mutta edelleen kiinnostaisi miten tuo hoidettaisiin yhdellä regexp-lauseella. Eikö regexpeissä ole joku "jos_ehto_toteutuu_hypätään_pois"-toiminto?
ajv kirjoitti:
Kiitokset tuosta -v:stä. Tuolla saan todennäköisesti tuon aamuisen ongelmani ratkaistua, mutta edelleen kiinnostaisi miten tuo hoidettaisiin yhdellä regexp-lauseella. Eikö regexpeissä ole joku "jos_ehto_toteutuu_hypätään_pois"-toiminto?
Tarkemman pohdinnan tuloksena muistinkin että melkein vastaava on käytössä omassa bottiprojektissa eli:
".*(?<!Abstract)Cmd\\.class"
matchaa kaikkiin jotka päättyvä Cmd.class, muttei kuitenkaan AbstractCmd.class stringiin. Tätä soveltaen:
".*(?<!foo\/).*\.php^"
tai jotain siihen suuntaan voisi toimia... RegExpien opetteleuun/testailuun on kätevä tämä:
Ja kiitokset taas :) Olin oikeilla jäljillä tuon kysymysmerkin kanssa, vaikka se olikin hieman väärässä paikassa... Luulen, että pääsen tuosta jo eteenpäin! Kiitokset vielä!
Aihe on jo aika vanha, joten et voi enää vastata siihen.