[Linuxtrent] Re: esperti di sed...

  • From: Marco Amadori <marco.amadori@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Mon, 21 Jan 2008 22:57:56 +0100

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

-- 
ESC:wq

Other related posts: