[Linuxtrent] Re: esperti di sed...

  • From: "Marco Ciampa" <ciampix@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Tue, 22 Jan 2008 10:39:17 +0100

On Tue, Jan 22, 2008 at 09:58:28AM +0100, Lele Gaifax wrote:
> On Tue, 22 Jan 2008 08:59:23 +0100
> "Marco Ciampa" <ciampix@xxxxxxxxx> wrote:
> 
> > Nuovo problema: purtroppo se la stringa è fatta così:
> > 
> > 4abcd def fgh
> > 
> > la prende tutta perché il gruppo centrale di parentesi viene
> > eliminato e quindi il riferimento \2 diventa l'ultimo gruppo... :-(
> > 
> 
> A me non succede quel che dici, e non comprendo cosa tu intenda con
> "viene eliminato", ma nel tuo caso, non ti serve la complicazione di
> ancorare il match all'inizio o alla fine... e da questa ultima mail,
> nemmeno che la cifra sia circondata da spazi...
> 
> Ergo:
> 
> $ echo '\
> > dsdas dsad 1 asdsdfd
> > 2asdasd dasdas das
> > jlkj lkljkj 3
> > jlij 4 ljk k5 asd
> > ads55adsd' | while read line; do echo $line | sed -e 
> > 's/[^0-9]*\([0-9]\)[^0-9]*/\1/'; done
> 1
> 2
> 3
> 45 asd
> 55adsd
> 
Ok non mi sono spiegato: 

la riga 2 avrebbe dovuto dare ""  come risultato
la riga 4 avrebbe dovuto dare "4" come risultato

in pratica bisogna isolare un numero (unico) che può essere circondato da
spazi o essere presente all'inizio o alla fine della stringa.

Ho risolto (sembra) così:

CL="MARKERXYZ $(<./prova.txt) MARKERXYZ" 
CL=$(echo -n $CL | sed -e 's/MARKERXYZ.* \([0-9]\).*MARKERXYZ/\1/g')

Aggiungo gli spazi e un marcatore all'inizio e alla fine della
stringa per cui sono nell'unica condizione di avere il mio numero isolato e
il comando echo non mi "ciuccia" gli spazi ai confini della stringa.

brutto ma funziona.

-- 

Marco Ciampa

+--------------------+
| Linux User  #78271 |
| FSFE fellow   #364 |
+--------------------+
-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: