[Linuxtrent] Re: esperti di sed...

  • From: "Marco Ciampa" <ciampix@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Tue, 22 Jan 2008 08:59:23 +0100

On Mon, Jan 21, 2008 at 10:57:56PM +0100, Marco Amadori wrote:
> Alle lunedì 21 gennaio 2008, Marco Ciampa ha scritto:
> > Cosa sbaglio?
> >
> > voglio cercare su bootparam il numero di runlevel senza indicarlo
> > esplicitamente, come da man bootparam.
> 
> > La seguente espressione regolare, pur essendo giusta, sed non la digerisce.
> > RL=$(sed -e '/\(^|.* \)\([09]\)\( .*|$\)/\2/g' /proc/cmdline)
> > Perché?
> 
> Non hai escapato i "|"
> 
> Ecco quella corretta:
> 
> RL=$(sed -e 's/\(^\|.* \)\([0-9]\)\($\| .*\)/\2/' /proc/cmdline)
> 
> Che però ha un altro bug... se la stringa che ottieni è di lunghezza maggiore 
> di 1 allora non c'è nessun numero singolo isolato.
> 
> quindi per farla lunga:
> 
> RL=$(sed -e 's/\(^\|.* \)\([0-9]\)\($\| .*\)/\2/' /proc/cmdline)
> if  [ `echo -n $RL | wc -c` != 1 ]; then
>       RL=`cat /etc/inittab | grep initdefault | sed -e 
> 's/.*:\([0-9]\):.*/\1/'`
> fi
> 
> e se è vuota non è impostato nessun RL di default, dunque me lo prendo 
> da /etc/inittab
> 
Capito! Grazie. 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... :-(

-- 

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: