Portál AbcLinuxu, 28. července 2025 14:15


Dotaz: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?

Libco avatar 18.10.2008 14:29 Libco | skóre: 8 | Banska Bystrica - sk
Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Přečteno: 253×
Odpovědět | Admin
V bash-i
Konkrétne. Je nejaký riadok scriptu v bashi (ten si viem nájsť a vybrať) napr.:
somar ide do kopca: nevladze; lebo vaha tiaze je "20" kg /
Ako z tohto riadku vybrať do premennej napr. časť:
nevladze; lebo vaha tiaze je "20

čiže premenna=.......
Díky za odpoveď.
lama
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.10.2008 16:24 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Odpovědět | | Sbalit | Link | Blokovat | Admin
neni mi jasna souvislost te vybrane casti s puvodnim retezcem (podle ceho tu cast vybrat). jinak obecny postup je: promenna=`echo $original | zpracovani` ; pricemz zpracovani je obvykle pres sed, awk a dalsi. v jednoduchych pripadech lze delat veci typu promenna=${original/neco/} - viz man bash.
In Ada the typical infinite loop would normally be terminated by detonation.
Libco avatar 18.10.2008 16:36 Libco | skóre: 8 | Banska Bystrica - sk
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Proste potrebujem podľa miesta v riadku(možno pozícia) vybrať konkrétnu časť.
lama
18.10.2008 17:24 petr
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Definuj, podle čeho chceš vybrat tu proměnnou - je to číslo řádku, nebo část na řádku za klíčovým slovem, nebo n-té slovo na řádku, nebo...
Libco avatar 18.10.2008 17:37 Libco | skóre: 8 | Banska Bystrica - sk
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Viem že napr. je premenná x="popokatepetl > << ## $3 mame sa radi" Je možné nejakým spôsobom prečítať počat znakov a na základe konkrétnych čísiel (napríklad 4, 2) vybrať obsah novej premennej? Malo by to byť: popokatepetl > << ## $3
lama
18.10.2008 20:56 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
jak jsem rekl, vzdy pouzijete schema promenna=`echo $retezec | program` ... napriklad pro pocet znaku se pouzije neco jako | wc -c | awk '{print $1}', pro znaky 3-10 muze byt neco jako | cut -c 5-10.

btw, tohle je dost neefektivni vuci systemu, pokud chcete zpracovavat retezce ve velkem, doporucuji perl.
In Ada the typical infinite loop would normally be terminated by detonation.
19.10.2008 03:41 mikky | skóre: 25 | blog: Ghlog | M. L. - Praha
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
... vzdy pouzijete schema ...
dovolím si oponovat - bash je v tomhle poměrně silný. Na věci, jako počet znaků, jednoduché substituce apod. nepotřebujete volat externí programy. v podstatě jediné, co bashi (doufám, že jen zatím) chybí, jsou regulární výrazy...

-m.
Je vám méně než 30 ? (jsme vrstevnící => budeme si tykat) : (jsem pro vás bažant => můžete mi tykat);
19.10.2008 18:20 luky
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Vylozene na zpracovavani textu (interne) je slaby. A regularni vyrazy umi.
19.10.2008 03:34 mikky | skóre: 25 | blog: Ghlog | M. L. - Praha
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
tohle?
[miky@ghoulie ~]$ x="nazdar pepo, jak je v depu?"
[miky@ghoulie ~]$ echo ${x:7:4}
pepo
z toho, jak to popisuješ opravdu nejde pochopit, co chceš ;)

-m.

Je vám méně než 30 ? (jsme vrstevnící => budeme si tykat) : (jsem pro vás bažant => můžete mi tykat);
Libco avatar 19.10.2008 08:34 Libco | skóre: 8 | Banska Bystrica - sk
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Toto "echo ${x:7:4}" je dobré a funguje, problém je však v tom, že by to malo byť takto: echo ${x:7:posledný znak riadku mínus 4} a "posledný znak riadku mínus 4" neviem zadefinovať.
lama
19.10.2008 12:25 mikky | skóre: 25 | blog: Ghlog | M. L. - Praha
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
echo ${param:4:2}
vrátí 2 znaky od pozice 4 (tedy znaky na pozicích 4 a 5). Pokud to chceš udělat od konce, stačí
echo ${param: -4:2}
což vrátí 2 znaky od 4. znaku od konce, tedy n-4. a n-3. znak, kde n je počet znaků v hodnotě proměnné (bacha na tu mezeru, tam musí být).

Ale to asi, podle toho, co si napsal níž, stejně neni to, co chceš :)

-m.

Je vám méně než 30 ? (jsme vrstevnící => budeme si tykat) : (jsem pro vás bažant => můžete mi tykat);
Libco avatar 19.10.2008 14:39 Libco | skóre: 8 | Banska Bystrica - sk
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Aj tak díky, zas viem niečo nové.
lama
Libco avatar 19.10.2008 15:34 Libco | skóre: 8 | Banska Bystrica - sk
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Dá sa "y=(echo ${param:4})" nahradiť iným príkazom?
Skúšam to v busyboxe a ten píse:
-sh: Syntax error: Bad substitution
Aj toto "echo ${param:4}" robí to isté
echo $param a echo ${param} pracujú správne
lama
19.10.2008 15:52 mikky | skóre: 25 | blog: Ghlog | M. L. - Praha
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
obávám se, že zrovna tohle busybox neumí (ačkoliv umí většinu ostatních "expanzí"). Tohle jedině přes sed/awk/cut apod...

např:
echo $y | cut -c4-
ale to, co asi spíš chceš, je dostat část za rovnítkem:
echo $y | cut -d= -f2
to druhý je bezpečnější, bo neřešíš, kolikátej znak to rovnítko je...

-m.
Je vám méně než 30 ? (jsme vrstevnící => budeme si tykat) : (jsem pro vás bažant => můžete mi tykat);
19.10.2008 15:54 mikky | skóre: 25 | blog: Ghlog | M. L. - Praha
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
nebo eště lepší
 echo ${x#*=} 
Je vám méně než 30 ? (jsme vrstevnící => budeme si tykat) : (jsem pro vás bažant => můžete mi tykat);
Libco avatar 19.10.2008 16:34 Libco | skóre: 8 | Banska Bystrica - sk
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Super, veľmi pekne ďakujem.
lama
Libco avatar 19.10.2008 15:39 Libco | skóre: 8 | Banska Bystrica - sk
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Proste potrebujem z tohto riadku:
s:/ezap/ui/skin=/var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml
dostať do premennej len túto časť:
/var/tuxbox/config/enigma/skins/new_blueline_skin_v3.esml
V bash-i to funguje príkazom: y=$(echo ${x:16}), pričom $x je hore uvedený riadok.
V busyboxe to nejde.
lama
Libco avatar 19.10.2008 10:49 Libco | skóre: 8 | Banska Bystrica - sk
Rozbalit Rozbalit vše Re: Ako vybrať konkrétnu časť premennej a ďať ju do druhej premennej?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak som to nakoniec vyriešil. :)
Ja som vlastne potreboval v riadku zmeniť jediné dvojciferné číslo za iné konkrétne.
pôvodný riadok:
name="eServiceSelector.Entry.Description" font="Blue.Regular" size="24"
príkaz:
sed -i '/eServiceSelector.Entry.Description/s/[0-9][0-9]/34/g' cesta_k_suboru
výsledok:
name="eServiceSelector.Entry.Description" font="Blue.Regular" size="34"

Čerpal som hlavne odtiaľto: http://sed.sourceforge.net/sed1line_cz.html

Díky za rady.
lama

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.