Newsgroup: it.comp.os.linux.development
Titolo: Togliere parte di testo

Ciao a tutti	
sono smanettatore a tempo quasi pieno, ma mi sto perdendo con un problemino
sicuramente facile, ma per me impossibile.
Devo riuscire a togliere da alcuni file di testo tutto ciò che è contenuto
tra maggiore e minore esempio: <pippo;89;3,2> (devo togliere anche il
maggiore e minore) e poi devo anche togliere tutto ciò che è compreso tra
at e doppio at esempio: esempio @beppe:#94; @@ (devo togliere anche gli
at), ho provato con il comando sed esempio cat test.txt | sed 's/\<\*\>//'
oppure cat test.txt | sed 's/\<{0,}\>//' ma non mi funziona una mazza.
Mi date qualche consiglio, link. Il problema è che non mi oriento fra le
espressioni regolari.
thanks
xenam


Prova cosi':
echo "a<sdavawv>h<z>b" |sed s/\<[^\>]*\>//g
Alessandro.

il Fri, 30 Jan 2004 15:53:57 +0100, Xenam e i suoi fratelli
<xe...@pippo.ti> ha scritto::

* significa '0 o più rièpetizioni del carattere precedente'. 
"." sta per 'qualsiasi carattere. 
quindi_
C:\DOCUME~1\gabriele>cat test.txt
blablA <pippo;89;3,4> miao
maiaoa @lbaublai@@mama
C:\DOCUME~1\gabriele>cat test.txt | sed "s/<.*>//"
blablA  miao
maiaoa @lbaublai@@mama
C:\DOCUME~1\gabriele>cat test.txt | sed "s/<.*>//" | sed "s/@.*@@//"
blablA  miao
maiaoa mama

>
credo che voglia dire che leva tutto fuori che il >>
ho provato anche
echo "a<sdavawv>h<z>b" |sed 's/\<*\>//g'
mi rende
a<sdavawv>h<z>b
:-(
Siccome io devo cercare di togliere tutto quello che è compreso tra due
caratteri <> o @ @@, compreso i caratteri, non riesco ad adattarlo, ma non
mi do per vinto.
Grazie comunque :-)
Xenam


Anche qui togli gli apici, inoltre non e' * ma .*
Alessandro.

 maiaoa mama
GRAZIEE :-))))) mi sto avvicinando alla meta, ma sorge un altro problemino 	
il comando che mi hai dato è troooppo potente, cerco di spiegarmi
se io al seguente testo:
questo è un esempio di prova di testo che non contiene altro
che <VC8;0;91;0;100;0;0,> miago gatto, era un gatto non cane che come cane
beppe<MO1>@beppe e anna@@ testo di prova<MO2> questo è un grande testo  
maramao perchè sei morto
uso il tuo comando: cat beppe | sed "s/<.*>//" in output mi viene
questo è un esempio di prova di testo che non contiene altro
che  miago gatto, era un gatto non cane che come cane
beppe questo è un grande testo
maramao perchè sei morto
l'errore consiste che nella terza riga, il comando leva tutto quello che è
compreso tra il primo minore e l'ultimo maggiore, togliendo quindi anche
una parte di testo che invece dovrebbe rimanere.
C'è qualche modo per dirgli di levare tutto tra il primo minore e il primo
maggiore?
Grazie lo stesso, un bel passo avanti, l'ho fatto.
Xenam



Scoperto l'arcano, non lavoravo con la Korn Shell ma in Csh.
Per questo avevo messo gli apici: nel modo scritto da te non andava proprio
niente, ma in ksh ...sluurp!
Graaazie mille, penso di aver risolto!!! :-)
Xenam

maggiore?
si, si chiama non greedy matching. Solo che non ho idea di come usarlo
con sed.
In perl o ruby scriveresti 
.*?
invece di 
.*
ma devi indagare tu se vuoi usare sed :)
$ruby -e  "print sub( /<.*?>/,'')" -n test.txt
blablA  miao
maiaoa @lbaublai@@mama
blablA  miao >
$cat test.txt
blablA <pippo;89;3,4> miao
maiaoa @lbaublai@@mama
blablA <pippo;89;3,4> miao >
che tradotto significa:
-n file
apri il file test.txt, e passalo una linea per volta al programma.
-e stringa
il programma è questa riga
sub(/regex/,'stringa')
sostituisci le stringhe che corrispondono a regex con 'stringa'
print
beh è chiaro :)

con sed.
Basta vedere il mio primo esempio :-D
Alessandro.

il Fri, 30 Jan 2004 17:29:06 GMT, 
test...@despammed.com
 (test) ha
scritto::

doh! chiedo venia e ringrazio per aver imparato qualcosa :)

:-) ancora grazie a tutti
xenam

 Basta vedere il mio primo esempio :-D
Potresti commentarlo  brevemente per favore?   Intanto ci provo  io da
solo:
sed s/\<[^\>]*\>//g
La mia  logica mi dice che una  volta che e' stato  sostituito da bash
l'espressione regolare diventa:
<[^>]*>
E quindi  il concetto  e' il  simbolo di minore  seguito da  un numero
arbitrario di  simboli (che non sia  il simbolo di maggiore)  e poi il
simbolo  di  maggiore.   In  questo   modo  sono  sicuro  che  il  ">"
considerato sia il primo ">" incontrato dopo il "<".
Ok, forse ce l'ho fatta a capire il tutto da solo :-D
-- 
Vuoi fare colpo su di lei con me?
Fai colpo su di lei con me! Fai colpo su di lei con me!
[Dr. Gonzo : Paura e delirio a Las Vegas]

 Ok, forse ce l'ho fatta a capire il tutto da solo :-D
Confermo :-)
Effettivamente non e' propriamente un "non greedy matching" ma un altro modo
di ottenere lo stesso risultato.
Alessandro.