Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

bash-brisanje od zadanog znaka do kraja linije

[es] :: Skript jezici :: bash-brisanje od zadanog znaka do kraja linije

Strane: 1 2

[ Pregleda: 5373 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

milan82

Član broj: 35288
Poruke: 72
*.adsl.net.t-com.hr.



Profil

icon bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 13:19 - pre 220 meseci
Evo nesto se zezam u bashu i naisao sam na sljedeci problem. Imam liniju npr.

Code:
 Elitesecurity je odlican forum.|stvarno je dobar


Ono sto mi treba je sljedece: kako izbrisati znak "|" i sve desno od njega (do kraja linije), tako da mi ostane samo prva recenica? Mislim da to sed moze uraditi ali ne uspjevam shvatiti kako.
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 13:27 - pre 220 meseci
Na primer u perl-u:

bash-2.05b$ echo "Elitesecurity je odlican forum.|stvarno je dobar" | perl -e 'while(<>){s/(.*)\|.*/\1/;print;}'
Elitesecurity je odlican forum.


Sigurno da može kraće i jednostavnije drugim alatima, ali eto ti nešto za početak. Dodaću kasnije još neko rešenje ako stignem.
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 13:34 - pre 220 meseci
AWK rešenje:

$ echo "Elitesecurity je odlican forum.|stvarno je dobar" | awk -F '|' '{print $1}'
Elitesecurity je odlican forum.
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 13:36 - pre 220 meseci
Cut rešenje:

$ echo "Elitesecurity je odlican forum.|stvarno je dobar" | cut -d '|' -f 1
Elitesecurity je odlican forum.
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 13:41 - pre 220 meseci
Sed rešenje:

$ echo "Elitesecurity je odlican forum.|stvarno je dobar" | sed "s/|.*//"
Elitesecurity je odlican forum.
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 13:43 - pre 220 meseci
Perl varijanta koju više volim:

$ echo "Elitesecurity je odlican forum.|stvarno je dobar" | perl -e 's/\|.*//&print while<>'
Elitesecurity je odlican forum.
 
Odgovor na temu

milan82

Član broj: 35288
Poruke: 72
*.adsl.net.t-com.hr.



Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 13:52 - pre 220 meseci
Gojko legenda si, hvala!
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 13:54 - pre 220 meseci
Np.

Cut može i kraće:

$ echo "Elitesecurity je odlican forum.|stvarno je dobar" | cut -d\| -f1
Elitesecurity je odlican forum.
 
Odgovor na temu

alex
Aleksandar Radulovic
Senior Software Engineer, Spotify
Stockholm, Sweden

Član broj: 71
Poruke: 2194
*.in.is.

Jabber: alex@a13x.info
ICQ: -1
Sajt: www.a13x.info


+1 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 14:56 - pre 220 meseci
Moze i krace i sa Perlom:
$ echo "Elitesecurity je odlican forum.|stvarno je dobar" | perl -ne 's/\|.*//&print'
Elitesecurity je odlican forum.


alex.
;)
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x
 
Odgovor na temu

milan82

Član broj: 35288
Poruke: 72
*.adsl.net.t-com.hr.



Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 16:16 - pre 220 meseci
E, imam jos jedan problem:
kako hvatam pojedinu liniju iz file-a sa:

Code:
varijabla=`head -$broj file | tail -1`


onda mi varijabla ima newline na kraju. Taj newline bi htio ukloniti.
Mozda ima neki drugi nacin hvatanja odredene linije bez newline-a?

 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 16:25 - pre 220 meseci
Bravo alex :) dao si mi ideju, ako ćemo već da pravimo sed od perla, može još 5 bajtova kraće:

$ echo "Elitesecurity je odlican forum.|stvarno je dobar" | perl -pne 's/\|.*//'
Elitesecurity je odlican forum.


Dalje od ovoga ne znam kako da skratim.
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 16:35 - pre 220 meseci
milan82: Dodavanjem:

| perl -pe chop


na kraj skidaš newline karakter.
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 16:37 - pre 220 meseci
A može i:

| tr -d '\n'
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 16:51 - pre 220 meseci
Perl regexp rešenje, ali nažalost nije kraće od chop varijante odozgo:

|perl -pe's!\n!!'
 
Odgovor na temu

milan82

Član broj: 35288
Poruke: 72
*.adsl.net.t-com.hr.



Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 16:52 - pre 220 meseci
Pokusao, ne radi:

Code:
varijabla=`head -$broj file | tail -1 | perl -pe chop`


(probao i tr varijantu). Newline mi ipak ostane?!
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 17:03 - pre 220 meseci
Da nisi možda štampao to sa echo ali bez -n?

echo po defaultu dodaje newline na kraj. Pogledaj man echo.

Daj celu skriptu ili relevantan deo, pa da vidimo gde i kako primećuješ postojanje neželjenog newline karaktera.
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 17:06 - pre 220 meseci
Meni se sad čini da ni onaj head i tail ne pokupe newline sa sobom, nego da se on vidi zbog echo-a. Ispadne da je stripping nepotreban.
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 17:11 - pre 220 meseci
Evo ono rešenje odozgo skraćeno za još dva bajta. Kada se koristi -p, ne mora se navoditi i -n za autoloop, pošto -p radi i to sam po sebi.

echo "Elitesecurity je odlican forum.|stvarno je dobar" | perl -pe's/\|.*//'


Ali najbolji je sed, tu ne mora ni single quote oko regexpa:

echo "Elitesecurity je odlican forum.|stvarno je dobar" | sed s/\|.*//
 
Odgovor na temu

milan82

Član broj: 35288
Poruke: 72
*.adsl.net.t-com.hr.



Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 17:36 - pre 220 meseci
Code:

Xdialog --icon $ikona --title "Pitanje" \
        --inputbox "$pitanje" 50 45 2> unos/unos.tmp.$$

retval=$?

input=`cat unos/unos.tmp.$$`
echo "upisao:"$input
todg=`head -$number PIO/odgovori | tail -1 | perl -pe chop`

if [ "$input" = "$todg" ]
then
echo "Tocno!"
let tocnih=($tocnih+1)
echo $tocnih

else
echo "znaci da je krivo..."
echo "#$input#"
echo "#$todg#"
fi



Na izazu dobijem npr.

Code:

upisao:chip
znaci da je krivo...
#chip#
#chip



Problem se vidi na izlazu, ispis sam stavio unutar gradela (#) tako da se tocno vidi da je uneseno:chip, a string s kojim se usporeduje je chip+newline ...
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: bash-brisanje od zadanog znaka do kraja linije17.02.2006. u 17:49 - pre 220 meseci
Izgleda da nam se shellovi drugačije ponašaju. Vidi ovo:


fireball:$cat test
test 1 2 3 | prva linija
test 2 3 4 | druga linija
test 4 5 6 | treca linija
test 555 test linija bez delimitera
fireball:$cat t.sh
#!/bin/sh

todg=`head -2 test|tail -1`
echo "#$todg#"

fireball:$sh t.sh
#test 2 3 4 | druga linija#


Ovako nešto i očekuješ, zar ne? Nema dodatnog strippinga, a opet ne sadrži newline posle onog tail -1.
 
Odgovor na temu

[es] :: Skript jezici :: bash-brisanje od zadanog znaka do kraja linije

Strane: 1 2

[ Pregleda: 5373 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.