Portál AbcLinuxu, 6. května 2025 09:13
Id Jméno Stav
----------------------------------
1 test běží
2 xp běží
3 vm-w7-64 běží
13 ubuntu běží
virsh -c qemu:///system list | grep "běží"
vypíše:
1 test běží
2 xp běží
3 vm-w7-64 běží
13 ubuntu běží
a já potřebuji z tohoto seznamu dostat jen ty názvy virtuálů, něco jako:
virsh -c qemu:///system list | grep "běží" | cut -d" " -f4
jenže to vypíše jen:
test
xp
vm-w7-64
a už ne ten poslední protože má ID dvoumístné a oddělovač cut je mezera -> tím se posune číslování sloupců a poslední virtuál je tak pod f3. Pokud by někdo znal lepší způsob jak vypreparovat seznam pouze jmen běžících virtuálu byl bych vděčný.
Děkuji
Řešení dotazu:
cut -d" " -f4
použi
awk '{print $2}'
echo '13 ubuntu blabla blablabla kokoX' | awk '{ print $2 }'
virsh -c qemu:///system list | grep "běží" | awk '{print $2;}'
nevadí i tak děkuji měl sem nějaky zatmění hemisfery nebo co, pač to akw je uplně geni(t)ální a není tam potřeba nic vymejšlet.
Ještě jednou díky a sorry za lame question...
Ahoj
Dalsi mozna varianta je pred cut
vsechny vicenasobne mezery nahradit jednou mezerou pomoci
sed -r 's/ +/ /g'A samozrejme upravit
cut
:
cut -d " " -f 3Takze vysledek:
[workspace]$ cat kvm.txt Id Jméno Stav ---------------------------------- 1 test běží 2 xp běží 3 vm-w7-64 běží 13 ubuntu běží [workspace]$ cat kvm.txt |grep "běží" | sed -r 's/ +/ /g' | cut -d " " -f 3 test xp vm-w7-64 ubuntu
Dejv
sed to umi i bez grep a cut:
$ echo ' Id Jméno Stav ---------------------------------- 1 test běží 2 xp běží 3 vm-w7-64 běží 13 ubuntu běží' | sed -e's/[[:blank:]]*[0-9]\+[[:blank:]]\([^[:blank:]]\+\)[[:blank:]]\+běží/\1/p;d' test xp vm-w7-64 ubuntu $Marek
sed -r 's/ +/ /g'
Na tohle stačí "tr -s ' '
". Když už se rozhodnete pro sed
, je jednodušší to v něm udělat celé:
sed -nre '/běží/ { s/[[:space:]]+[0-9]+[[:space:]]+([^[:space:]]+)[[:space:]].*/\1/ ; p }'
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.