Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: NoWin 06 Listopadu 2009, 04:34:07
-
Nazdar,
potřebuju seda přemluvit k tomu, aby mi výraz ACTIVE_CONSOLES="/dev/tty[1-n]" (kde n je číslo 3-9) převedl na ACTIVE_CONSOLES="/dev/tty[1-2]"
Kdyby tam nebyly ty hranatý závorky, tak si s tím tak nějak poradím, ale vůbec nevím, čím je nahradit/obohatit, aby mě to poslechlo.
EDIT:
Tak nic...
sed 's/^ACTIVE_CONSOLES="\/dev\/tty\[1-[3-9]\]"/ACTIVE_CONSOLES="\/dev\/tty[1-2]"/g'
:)
-
$ echo 'ACTIVE_CONSOLES="/dev/tty[1-4]"' | sed 's/\(^.[^[]*\)\[1-[3-9]\].*/\1[1-2]"/'
ACTIVE_CONSOLES="/dev/tty[1-2]"
-
$ echo 'ACTIVE_CONSOLES="/dev/tty[1-4]"' | sed 's/\(^.[^[]*\)\[1-[3-9]\].*/\1[1-2]"/'
ACTIVE_CONSOLES="/dev/tty[1-2]"
Díky, taky funguje!
Ale přece jen si s něčím nevím rady- potřebuju, aby z příkazu free -m | grep "Mem:" vylezlo místo:
Mem: 2025 1179 845 0 109 714
pouze tohle:
2025
Mezery mezi jednotlivýma položkama byly nejspíš vytvořeny tabulátorem, teď to jsou obyčejný mezery, jejichž počet může bejt variabilní, dejme tomu 1-8, respektive 1-16. Potřebuju z toho vyloudit jen jediný číslo (velikost RAM v MiB), jehož hodnota i dýlka bude taky variabilní.
Chci to do svýho prográmku, ten mimo jiný bude strojům na základě velikosti RAM nastavovat hodnotu vm_swappiness ;)
-
Jestli je to pořád ve stejným formátu, jen jiný hodnoty tak awk :).
echo "Mem: 2074012 1204944 869068 0 110460 731436" | awk '{print $2}'
2074012
-
Jestli je to pořád ve stejným formátu, jen jiný hodnoty tak awk :).
echo "Mem: 2074012 1204944 869068 0 110460 731436" | awk '{print $2}'
2074012
Jé, díky!
Mezitím jsem sice změnil kilo za mega (zbytečně moc čísel), ale funguje to, navíc geniálně jednoduše!
Díky moc! ;)
free -m | grep "Mem:" | awk '{print $2}'
-
umh. konceptualne spatne a neefektivne ;), spravne reseni je:
> foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo
109404
-
umh. konceptualne spatne a neefektivne ;), spravne reseni je:
> foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo
109404
↑ Tohle číslo je co? :) Mně z toho leze 69xxx (69686, 69092,... pokaždý jiná hodnota)...
-
umh. konceptualne spatne a neefektivne ;), spravne reseni je:
> foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo
109404
↑ Tohle číslo je co? :) Mně z toho leze 69xxx (69686, 69092,... pokaždý jiná hodnota)...
si catni /proc/meminfo a uvidíš.. Ntzův příkaz manipuluje s řádkem Mapped, takže si to nahraď čím chceš
-
btw, Ntz, není jednodušší napsat:
debian@debian-desktop:~$ foo=Mapped; cat /proc/meminfo | grep $foo | sed -e "s/[^0-9]*//g"
135540
?
-
Jednodušší asi jo, ale dvě roury? :D :D
arrange@lean:~$ time for i in {1..1000}; do foo=Mapped; cat /proc/meminfo | grep $foo | sed -e "s/[^0-9]*//g" > /dev/null; done
real 0m11.167s
user 0m5.272s
sys 0m5.308s
arrange@lean:~$ time for i in {1..1000}; do foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo > /dev/null; done
real 0m4.397s
user 0m2.056s
sys 0m1.792s
arrange@lean:~$ time for i in {1..1000}; do awk '/^Mapped/ {print $2}' /proc/meminfo > /dev/null; done
real 0m3.781s
user 0m1.564s
sys 0m2.024s
-
Jednodušší asi jo, ale dvě roury? :D :Darrange@lean:~$ time for i in {1..1000}; do foo=Mapped; cat /proc/meminfo | grep $foo | sed -e "s/[^0-9]*//g" > /dev/null; done
real 0m11.167s
user 0m5.272s
sys 0m5.308s
arrange@lean:~$ time for i in {1..1000}; do foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo > /dev/null; done
real 0m4.397s
user 0m2.056s
sys 0m1.792s
arrange@lean:~$ time for i in {1..1000}; do awk '/^Mapped/ {print $2}' /proc/meminfo > /dev/null; done
real 0m3.781s
user 0m1.564s
sys 0m2.024s
jasně.. jenže když to pouštíš jen tak, není to fuk?
debian@debian-desktop:~$ time for i in {1..1000}; do foo=Mapped; cat /proc/meminfo | grep $foo | sed -e "s/[^0-9]*//g" > /dev/null; done
real 0m5.522s
user 0m1.969s
sys 0m5.341s
debian@debian-desktop:~$ time for i in {1..1000}; do foo=Mapped; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo > /dev/null; done
real 0m3.584s
user 0m1.159s
sys 0m2.448s
debian@debian-desktop:~$ time for i in {1..1000}; do awk '/^Mapped/ {print $2}' /proc/meminfo > /dev/null; done
real 0m3.929s
user 0m1.357s
sys 0m2.503s
-
Je to úplně jedno :D
Proto tam mám ty dva smajly :D :D
-
když ne dvě roury, tak použít prostě
foo=Mapped; cat /proc/meminfo | sed -n "/^$foo/s/[^0-9]*//pg"
:P
-
hehe .. quejky, je to jedno, ale moc rour a moc binarek == neefektivne spotrebovane resources ..
ad.sed) sed ma syntaxi `sed VYRAZ VSTUP`, takze `cat soubor | sed VYRAZ` je noseni drivi do lesa
-
hehe .. quejky, je to jedno, ale moc rour a moc binarek == neefektivne spotrebovane resources ..
ad.sed) sed ma syntaxi `sed VYRAZ VSTUP`, takze `cat soubor | sed VYRAZ` je noseni drivi do lesa
hm ok..
debian@debian-desktop:~$ foo=Mapped; sed -n "/^$foo/s/[^0-9]*//pg" /proc/meminfo
138568
-
rejpal :(
arrange@lean:~$ foo=DirectMap4k; sed -n "/^$foo/ s/[^0-9]*//pg" /proc/meminfo
4102392
arrange@lean:~$ foo=DirectMap4k; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo
4
arrange@lean:~$ foo=DirectMap4k; grep $foo /proc/meminfo
DirectMap4k: 102392 kB
-
rejpal :(arrange@lean:~$ foo=DirectMap4k; sed -n "/^$foo/ s/[^0-9]*//pg" /proc/meminfo
4102392
arrange@lean:~$ foo=DirectMap4k; sed -n "/^$foo/s/^.[^0-9]\+\([0-9]\+\).*/\1/p" /proc/meminfo
4
arrange@lean:~$ foo=DirectMap4k; grep $foo /proc/meminfo
DirectMap4k: 102392 kB
vypadá to že prostě při každém z těchto příkazů je to s tou pamětí jinak no :)