PDA

Prikaži potpunu verziju : Linux script pitanje


pedja1
26.12.2011, 10:23
Pokusavam da napravim skriptu koja radi sledece:
ispisuje u fajl kompletan sadrzaj foldera(ls) zatim skenira taj file i ispisuje na ekranu liniju posle odredjene linije. Evo kako sam ja to zamislio
#!/system/bin/sh
var=1
cd /sdcard
ls > /sdcard/log
line=`sed -n '"$var"p' /sdcard/log`
linenext=`cat /sdcard/log | grep -A 1 "$line"|cut -d: -f1`
echo "$linenext"

Znaci u ovom slucaju trebalo bi da ispise drugu liniju
Problem je sto izbacuje sed unsuported command " a kad izbacim promenjivu i ubacim broj linije direktno onda ispisuje obe linije i prvu i drugu. Pretpostavljam da u drugom slucaju nevalja cut ali nigde nisam nasao kako da izbaci prethodnu liniju. Jel mozda negde gresim?

Sent from my U8110 using Tapatalk

VojaM
26.12.2011, 11:44
A jesi li ti siguran da ono '"$var"p' daje baš ono što si hteo?
Probaj da napišeš samo "$var"p bez apostrofa okolo.

To je što se tiče greške u sed-u.

Što se tiče cut komande, treba da napraviš razmak između parametra -p i dvotačke:
cut -d : -f

pa onda vidi da li je nešto pomoglo.

Ja se baš ne razumem toliko u sve varijante ovih komandi, ali kad god sam probao ovo tvoje, uvek mi je grep izbacivao liniju koju sam tražio i još jednu više. Nemam pojma zašto je to tako. E sad, imaš posebne varijante komande ls koje ubacuju na kraj svake linije neki specijalni karakter, mislim da je $. Možda ti to može pomoći da uz pomoć komande cut sa delimiterom $ razdvojiš ono što ti treba, ako ovaj način koji si probao ne uspe.

pedja1
26.12.2011, 12:14
A jesi li ti siguran da ono '"$var"p' daje baš ono što si hteo?
Probaj da napišeš samo "$var"p bez apostrofa okolo.

To je što se tiče greške u sed-u.

nemoze nece tako ali ovako hoce:
#!/system/bin/sh
var=1
cd /sdcard
ls > /sdcard/log
line=`sed -n ''$var'p' /sdcard/log`
linenext=`cat /sdcard/log | grep -A 1 "$line"|cut -d: -f1`
echo "$linenext"

Ali opet ostaje drugi problem, jel mozda znas kako da mi prikaze samo sledecu liniju? mora da bude samo jedna.

pedja1
26.12.2011, 13:03
Uspeo sam konacno
#!/system/bin/sh
var=1
next=`expr $var + 1`
cd /sdcard
ls > /sdcard/log
line=`sed -n ''$var'p' /sdcard/log`
linenext=`head -n $next /sdcard/log| tail -n 1`
echo "$linenext"
Koristio sam head umesto grep i cut
:D