Newsgroup: it.comp.os.linux.iniziare
Titolo: [OT]Regular Expression

Ciao ragazzi
chi è un mostro sacro delle regularexpression potrebbe aiutarmi a far
diventare
This/../is/../an/../example in -> example
o
This/../is/../an/../example/.. in -> This
è possibile?
VinX

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
vinx ha scritto:

Ho la vaga sensazione di non aver capito la domanda, perche' non ci
vuole un mostro delle espressioni regolari, e non c'e' nemmeno chissa'
che difficolta'.
Per la prima:
echo This/../is/../an/../example | sed 's:This/../is/../an/../::'
Per la seconda:
echo This/../is/../an/../example/.. | \
sed 's:/../is/../an/../example/..::'
- --
Dario Basile
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.7 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iD8DBQFDwxyq7mRkrRsDl/8RAuZMAKCBQD2eDWka1Lvn3hdtOCTsArtCdACgmdO6
vrJVOYUkdRfHn7rSmYWkwFs=
=GLKq
-----END PGP SIGNATURE-----

 Dario Basile
ok giustissimo quello che dici tu! Però è valido solo per questo tipo di
esempio
riformulo la domanda:
è possibile che data una stringa del tipo 
        prova/ciao/../ok
la regular expression al riconoscimento della coppia di puntini ".." mi
cancelli "ciao/.." in modo da farmi rimanere prova/ok
l'intenzione è fare una regexp che mi faccia andare in giro per l'hard disk
però senza risalire una directory prefissata, ossia
cd vado/avanti/../indietro/dove/../../voglio
senza poter risalire da directory vado
insomma come fa bash se provo a fare cd .. quando mi trovo nella root
ovviamente mi ritorna la root (per root intendo /)
non so se sono stato + chiaro di prima

 ovviamente mi ritorna la root (per root intendo /)
Abbi pazienza eh... questa espressione regolare la devi passare a un
comando in uno script, no? E allora non e' piu' semplice portarti nella
directory ''tetto'' e li' usare il comando che ti serve con le opzioni
per la ricorsivita'?
Anche perche' per essere sicuro di non risalire oltre la directory che
ti interessa dovresti beccare non solo la stringa
/nomedirectory/../
ma anche
/nomedirectory/sottodirectory/../../
Come fai a farlo con un'espressione regolare? L'espressione regolare ti
individua solo un blocco di testo, non ''sa'' se si tratta di una frase
in italiano, di un path o di qualcos'altro.
- --
Dario Basile
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.7 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iD8DBQFDw8Rj7mRkrRsDl/8RAhnvAKDozQYAPLZxVyZFK66L8ioH/5U5+QCffzLE
UsB5ygTSCoXj9pPwm9fEL2U=
=kkik
-----END PGP SIGNATURE-----

 Dario Basile
appunto... chiedevo proprio se esisteva un modo per farlo con una
espressione regolare!
Grazie per la risposta... cercherò di risolvere il problema in un altro
modo! :)

vinx wrote:

Esiste un programma molto comodo per scrivere espressioni regolari:
kregexpeditor
provalo, e' troppo comodo e impari subito tutto.
-- 
Nobody suffers the pain of birth or the anguish of loving a child in
order for presidents to make wars, for governments to feed on the
substance of their people, for insurance companies to cheat the young
and rob the old.
  -- Lewis Lapham


Il modo c'è ma per taluni casi. es.
echo "/pippo/pluto/../paperino/../pappa" | sed 's/[^\/]*\/..\///g'
restituisce /pippo/pappa
Contempla tutti i casi in cui vi siano coppie di "/directory/../", ma
non contempla il caso in cui tu abbia per esempio "/dir1/dir2/../../" a
meno che tu non gestisca con un ciclo e faccia eseguire più volte.
P.es.
echo "/pippo/pluto/../papero/pappa/../pippa/../../papera/../../nonna/"|\
     sed 's/[^\/]*\/..\///g'
restituisce /pippo/papero/../../nonna/
con due giri
echo "/pippo/papero/../../nonna/" |sed 's/[^\/]*\/..\///g'
hai /pippo/../nonna/
e al terzo giro
echo "/pippo/../nonna/"|sed 's/[^\/]*\/..\///g'
hai il risultato: /nonna/
Se vuoi fare tutto in un colpo solo puoi invece affidarti alle perl
regular expression.
man pcre
/RECURSIVE PATTERNS
-- 
Flavio Visentin
Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4

 Il modo c'è ma per taluni casi.
[CUT]
Se ho ben capito, lui non vuole eliminare tutti i gruppi
''nomedirectory/../'' ma solo quelli che lo portano al di sopra di una
certa directory prefissata.
- --
Dario Basile
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.7 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iD8DBQFDxj4s7mRkrRsDl/8RAlIyAKDesvjjkTU4txHEcgsIY+GomdPuUACgntWi
X72DVxsdxOkbQDdVFTWNeKI=
=OTAx
-----END PGP SIGNATURE-----