Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: webhope 27. 05. 2010, 14:39:43

Název: awk - pokus o opravení
Přispěvatel: webhope 27. 05. 2010, 14:39:43
Zdravím,
Mám takovýto kód (bash, awk)
Kód: [Vybrat]
block='kernel (hd0,2)/boot/vmlinuz BOOT_IMAGE=linux root=UUID=eab515e9-bc3e-4024-9f01-55fddaa0fb1c  resume=UUID=e12487ff-6d6f-44c4-9e03-33f545b3b798 splash=silent vga=788'
echo "$block" | awk '/.*UUID=/{ x=gensub(/.*UUID=([-0-9a-fA-F]+)[ )].*/,"\\1",1);  print x}'
Vrací mi to to druhé číslo UUID, ale potřeboval bych vrátit to první UUID. Nevím zda se dá tohle udělat pomocí sub(), nějak se mi to nedaří. Zkouším něco takového:
Kód: [Vybrat]
echo "$block" | awk '/.*UUID=/{ sub(/.*UUID=([-0-9a-fA-F]+)[ )].*/,"\1");  print $0}'Nějaký další nápad?
Název: Re: awk - pokus o opravení
Přispěvatel: Jiří Lisický 27. 05. 2010, 15:35:37
Co tohle?
Kód: [Vybrat]
echo "$block" | awk '{match($0, "root=UUID=([^ ]*)", pole); print pole[1]}'
Název: Re: awk - pokus o opravení
Přispěvatel: pavel 27. 05. 2010, 17:10:46
echo "$block" awk '{split($4, Z, "=");printf("%s", Z[3])}'
Název: Re: awk - pokus o opravení
Přispěvatel: webhope 27. 05. 2010, 18:30:05
Až teď mě napadlo, že bych mohl použít ten svůj příklad, jen bych tam strčil to root=...
Ale musím to ještě zvážit, protože si teď  nejsem jistý jestli by se ta řádka ne/mohla objevit i v této podobě:

block='kernel (UUID=eab515e9-bc3e-4024-9f01-55fddaa0fb1c)/boot/vmlinuz BOOT_IMAGE=linux resume=UUID=e12487ff-6d6f-44c4-9e03-33f545b3b798 splash=silent vga=788'

Tedy že za kernel (nebo initrd) následuje (UUID=číslo_uuid). To nevím jestli je platný zápis. A bez argumentu root=. Nerozumím tomu proč tam je ten argument root= když ten kernel už má specifikovanou cestu. Bylo by možné že by tam ten root= nebyl? Jinak pokud by byl vždy tak bych použil root= jako jedinečný "identifikátor".