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