» »

grep - čisto malo pomoči ;)

grep - čisto malo pomoči ;)

c0dehunter ::

Zdravo, v Linuxu izpisujem skupine, pa bi rabil pomoč pri sicer čisto enostavnem regularnem izrazu. Rad bi, da mi grep izpiše le tiste vrstice, ki vsebujejo eno določeno besedo, vendar za njo NE SME biti dvopičja. Torej če je v datoteki

group:x:4:janez
admins:x:5:group

in iščem za besedo "group", mi naj vrne samo drugo vrstico, saj za "group" ni dvopičja.
Poskusil sem takole:

cat /etc/group | grep "group[^:]"

vendar ne dela, sumim da tisto kar je bold ni prav.

Če kdo ve kaj več, se priporočam.

*p.s.: primer sem poenostavil, v resnici ne iščem za string group
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

overlord_tm ::

Za takle primer dela tocno taka koda kot si jo napisal zgoraj. Probaj egrep, ampak nebi smel biti problem.

Sicer pa imam filing da bi rad iskal po 4. stolcu datoteke, torej po grupah uporabnikov. Lahko probas awk ;)

Zgodovina sprememb…

c0dehunter ::

No, tole ne dela.. Poskusi npr.
cat /etc/group | grep "vnesi_svoj_username[^:]"
Pa boš videl da ne dobiš nobene vrstice vrnjene...

recimo ene par vnosov v moji /etc/group:
admin:x:119:c0dehunter
sambashare:x:133:c0dehunter
c0dehunter:x:1000:


Z zgornjim ukazom
cat /etc/group | grep "c0dehunter[^:]"
naj bi dobil prvi dve vrstici, vendar ukaz ne vrne ničesar...
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

srus ::

Morda kaj takega

grep $1 $2 | grep -v $1:

s tem da je prvi parameter string ki ga iščeš, drugi parameter pa tisto po čemer iščeš.

c0dehunter ::

srus je izjavil:

Morda kaj takega

grep $1 $2 | grep -v $1:

s tem da je prvi parameter string ki ga iščeš, drugi parameter pa tisto po čemer iščeš.


Evo, s tem dela* vendar se mi zdi nekako dolgo vse skupaj, sem mislil da se da z regularnimi izrazi.

* dela, če vnesem takole:
cat /etc/group | grep "c0dehunter" | grep -v "c0dehunter:"

kjer z zadnjim ukazom vse vrstice, ki vsebujejo po mojem usernamu še dvopičje..
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

Zgodovina sprememb…

brodul ::

grep -r ^group /etc/group

vrne prvo vrstico
vrstica se mora začeti z group

grep -r .games /etc/group 

vrne drugo
v vrstici mora imeti group vsaj en znak pred sabo

Pa ne cat | v grep.
-r regex
Pretending to be a mature adult is so exhausting.

Zgodovina sprememb…

  • spremenilo: brodul ()

c0dehunter ::

Brodul, to je to, to sm rabu :) Pa sem verjetno ene 10x videl tole piko spredaj v tutorialih, pa mi ni kapnilo da bi lahk tut to uporabil..
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

c0dehunter ::

Še eno vprašanje, če lahko.
free -m
             total       used       free     shared    buffers     cached
Mem:          2003       1464        539          0         82        830
-/+ buffers/cache:        550       1452
Swap:          975          0        975


Kako bi tukaj ven extractal posamezne podatke, npr. 2003 za total RAM?
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

Zgodovina sprememb…

misek ::

free -m | awk '/Mem:/ {print $2}'

Daedalus ::

cat /proc/meminfo je precej bolj parsabilen.
Man is condemned to be free; because once thrown into the world,
he is responsible for everything he does.
[J.P.Sartre]

c0dehunter ::

misek, pri vaji je uporaba awk žal prepovedana. Daedalus, kako pa bi tukaj ven extractal, torej brez awk?
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

Spura ::

V regexu si pozabil, da ubistvu ni tako, da bi sledil znak, ki ni dvopicje, ampak sledi konec vrstice.Regex je torej "codehunter$".

c0dehunter ::

Spura je izjavil:

V regexu si pozabil, da ubistvu ni tako, da bi sledil znak, ki ni dvopicje, ampak sledi konec vrstice.Regex je torej "codehunter$".

Ta problem smo sicer rešli že par postov nazaj, ampak ni res da sledi konec vrstice, ker so lahko z presledki nanizani tudi drugi uporabniki v skupini, tako da to ne bi delovalo. Je pa res da je moj primer tak, ker sem pač poenostavil.

Trenuten aktualni problem pa je par postov višje :)
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

misek ::

c0dehunter, a to spet z regularnim izrazom? Sed je dovoljen?

c0dehunter ::

ne, tudi sed ni dovoljen ;(( Torej sed in awk nista dovoljena, ostalo je. Ni pa važno ali z regularnimi izrazi ali ne, samo da se dobi rezultat ki ga iščem.

iz /proc/meminfo lahko takole extractam (sem ugotovil):
cat /proc/meminfo | grep "MemTotal" | tr -cd '[[:digit:]]'

Torej z tr -cd odrežem vse, kar ni cifra. Vendar je to precej omejeno, npr. če bi še kje v vrstici bila kaka cifra ne bi delovalo :|
*kar se mi dogaja ravno zdajle :)
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

Zgodovina sprememb…

milc ::

Verjetno je tudi perl prepovedan:
cat /proc/meminfo | grep "MemTotal" | perl -pe 's/.* (\d*) .*/"$1"/'

Ali pa tudi tako:
cat /proc/meminfo | grep "MemTotal:" | cut -d: -f2 | xargs | cut -d' ' -f1

Daedalus ::

Daedalus, kako pa bi tukaj ven extractal, torej brez awk?


Ah, na par grdih načinov bi šlo:D

cat /proc/meminfo | grep -r MemTotal: | tr -d [a-z,A-Z] | tr -d : | tr -d " "


Al pa variacija na milca:

cat /proc/meminfo | grep -r "MemTotal:" | cut -d: -f2 | tr -d [a-z,A-Z] | tr -d " "


Načeloma gre tak... pač pogrepaš vrstico, ki jo rabiš, pol jo pa po korakih "posekaš" - preveč lačni regexi so pa vedno problem.
Man is condemned to be free; because once thrown into the world,
he is responsible for everything he does.
[J.P.Sartre]

Zgodovina sprememb…

  • spremenilo: Daedalus ()

c0dehunter ::

Hvala ;) Z awk-om bi tole šlo res hiter ampak ne vem zakaj so ga "prepovedali"..
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

bigbada ::

@codehunter, kako si naredil
Napišite skripto Bash, ki prikaže status sistema glede na:
- CPU,
- primarni pomnilnik,
- disk,
- omrežje.

in tabelarični izpis ?? A lahko prilimaš ukaz prosim :)

c0dehunter ::

Za vsako izmed teh stvari sem pač poiskal in extractal par ustreznih informacij, ki kažejo status sistema.
Recimo za CPU sem izpisal št. procesov ki trenutno tečejo in average load-e - slednje sem extractal kar iz izpisa ukaza w, recimo za zadnjo minuto:
CPU_LOAD1=$(w  | grep "average:" | cut -d ' ' -f 12)


Tabelarični izpis je lahko karkoli, v konči fazi tudi html tabela izpisana, tako da sem izpis preprosto oblikoval kar z echo ukazom.

Upam, da ti kaj pomaga..
I do not agree with what you have to say,
but I'll defend to the death your right to say it.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

linux kernel porabi po nekaj casa malo manj kot 10 GB rama?

Oddelek: Operacijski sistemi
271600 (812) Brane22
»

linux/HD/fsck/device is busy

Oddelek: Operacijski sistemi
8832 (645) BRBR
»

Makefile in c++

Oddelek: Programiranje
253059 (2099) Looooooka
»

linux vdor -- nekdo skenira druge prek SSH ?

Oddelek: Operacijski sistemi
81627 (1286) terryww
»

Skripte (strani: 1 2 )

Oddelek: Programiranje
508710 (6573) Microsoft

Več podobnih tem