Regexp: negacia slova (WAS[4]: [linux] regexp needed)
Matus "fantomas" Uhlar
uhlar na fantomas.sk
Pondělí Květen 20 11:10:32 CEST 2002
-> > opytam sa inak, ako sa robi regexp (nechcem pouzit grep -v), ktory neguje
-> > cele slovo, cize vypis mi vsetky riadky, kde sa nenachadza slovo
-> > "nechcem"?
-> Tak toto by seriozne zaujimalo aj mna. Mam pocit, ze sa to neda, ale
-> budem strasne rad ak ma niekto presveci o opaku. V zivote som to potreboval
-> asi dva krat a vzdy som si nadaval, ze to neviem. :-)
->
-> [^n][^e][^c]... nevedie k cielu skoro za ziadnych okolnosti.
-> Regularny vyraz je totiz stavany tak, za sa snazi to slovo vzdy akceptovat.
-> Viz. tiez teoriu k Formalnym jazykom.
regularne vyrazy su na to aby matchovali a nie aby nematchovali. a regexp
[^n][^e][^c][^h][^c][^e][^m] matchne vsetko okrem cisteho slova nechcem.
takze pokial ide o povodnu ulohu, spravne riesenie napisal Jan Tomka (akurat
neefektivne: http://lists.linux.sk/pipermail/linux/2002-May/020722.html), tu
je upravene:
grep '/skuska' | grep -v '/skuska.*nechcem'
alebo
grep '/skuska' | grep -v '/skuska[^/]*nechcem'
...to druhe vypise riadky kde sa 'nechcem' sice nachadza sa skuska ale az za
dalsim / teda adresar zacina slovo skuska ale neobsahuje slovo nechcem -
slovo nechcam je az dalsi subor/adresar pod nim
pokial ide o negaciu niecoho, pomoze asi perl a jeho vyraz (?!pattern) a
teda povodne riesenie by malo vyzerat takto:
perl -ne 'print if /\/skuska(?\![^\/]*nechcem)/'
poznamka 1.
"[^\/]*" mozes nahradit ".*" ak si si isty ze v matchujucom adresari nikdy
nebude subor/adresar s obsahom 'nechcem' (podla autora Brana:
http://lists.linux.sk/pipermail/linux/2002-May/020728.html) sa to nestane.
poznamka 2.
kto nema (t)csh, moze "\!" nahradit cistym "!" pretoze ostatne shelly
maju history substitution vyriesenu inym sposobom
hmmm to by malo byt definitivne
--
Matus "fantomas" Uhlar, uhlar na fantomas.sk ; http://www.fantomas.sk/
Warning: I don't wish to receive spam to this address.
Varovanie: Nezelam si na tuto adresu dostavat akukolvek reklamnu postu.
Fucking windows! Bring Bill Gates! (Southpark the movie)
Další informace o konferenci linux