Portál AbcLinuxu, 14. července 2025 08:38


Dotaz: Vyhledání řetězce v proměnné

4.3.2007 19:05 Miroslav Cyroň | skóre: 12
Vyhledání řetězce v proměnné
Přečteno: 153×
Odpovědět | Admin
Potřebuji poradit: v proměnné mám např.
[cftyc vjv m] [njkkuhb] [kbukhxdf dxrc]
Potřebuji vyextrahovat vše mezi POSLEDNÍMI "[" a "]". Všude je spousta návodů na extrakci ze souborů, ale jak na to v případě proměnné? Děkuji.
Vše pro Mageia Linux: www.cyron.cz. Vlastní repozitář, 60 GB her v RPM (!!!). Kapitalismus považuji za zločinný režim.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.3.2007 19:20 Marian Krucina | skóre: 13
Rozbalit Rozbalit vše Re: Vyhledání řetězce v proměnné
Odpovědět | | Sbalit | Link | Blokovat | Admin
[marian@alf ~]$ prom='[cftyc vjv m] [njkkuhb] [kbukhxdf dxrc]'
[marian@alf ~]$ echo $prom|sed -e 's/^.*\[\(.*\)\]$/\1/'
kbukhxdf dxrc
4.3.2007 19:56 Miroslav Cyroň | skóre: 12
Rozbalit Rozbalit vše Re: Vyhledání řetězce v proměnné
A jak to dát do proměnné?
p='[cftyc vjv m] [njkkuhb] [kbukhxdf dxrc]'
px=`$p|sed -e 's/^.*\[\(.*\)\]$/\1/'`
echo $px
bash: [cftyc: command not found
Vše pro Mageia Linux: www.cyron.cz. Vlastní repozitář, 60 GB her v RPM (!!!). Kapitalismus považuji za zločinný režim.
4.3.2007 20:02 Marian Krucina | skóre: 13
Rozbalit Rozbalit vše Re: Vyhledání řetězce v proměnné
[marian@alf ~]$ p='[cftyc vjv m] [njkkuhb] [kbukhxdf dxrc]'
[marian@alf ~]$ px=`echo $p|sed -e 's/^.*\[\(.*\)\]$/\1/'`
[marian@alf ~]$ echo $px
kbukhxdf dxrc
To echo tam je, aby vypsalo $p do roury, ze které čte sed.
4.3.2007 20:27 Miroslav Cyroň | skóre: 12
Rozbalit Rozbalit vše Re: Vyhledání řetězce v proměnné
Moc děkuji. Škoda jen, že se v tom výrazu nevyznám, takže pokud budu chtít příště něco jiného a třeba odpředu, budu zase bezradný. Nevíte prosím o nějakých stránkách "Sed pro začátečníky"? :-)
Vše pro Mageia Linux: www.cyron.cz. Vlastní repozitář, 60 GB her v RPM (!!!). Kapitalismus považuji za zločinný režim.
4.3.2007 20:44 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: Vyhledání řetězce v proměnné
O sedu toho bylo napsáno dost. Neříkej, žes hledal a nic nenašel.
4.3.2007 20:05 retkarach
Rozbalit Rozbalit vše Re: Vyhledání řetězce v proměnné
pozmen riadok px=`$p|sed -e 's/^.*\[\(.*\)\]$/\1/'` na px=`echo "$p"|sed -e 's/^.*\[\(.*\)\]$/\1/'`
4.3.2007 20:40 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: Vyhledání řetězce v proměnné
Odpovědět | | Sbalit | Link | Blokovat | Admin
Všude je spousta návodů na extrakci ze souborů, ale jak na to v případě proměnné?
A co třeba tady? Koukals?

Jak to funguje se dočteš v článku :
$ prom="[cftyc vjv m] [njkkuhb] [kbukhxdf[tisk]xxx"
$ prom="${prom%]*}"; prom="${prom##*[}";  
$ echo "$prom"
tisk
4.3.2007 21:57 Miroslav Cyroň | skóre: 12
Rozbalit Rozbalit vše Re: Vyhledání řetězce v proměnné
Dík, to pochopím. :-D
Vše pro Mageia Linux: www.cyron.cz. Vlastní repozitář, 60 GB her v RPM (!!!). Kapitalismus považuji za zločinný režim.
5.3.2007 00:12 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Vyhledání řetězce v proměnné
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dalo by se to třeba v pythonu udělat tak, že se nejprve levé závorky nahradí pravými, pak se řetězec rozseká v místech, kde jsou pravé závorky a vezme se z toho předposlední položka:
>>> prom = '    [cftyc vjv m]   [njkkuhb]   [kbukhxdf dxrc ] '
>>> prom.replace('[', ']').split(']')[-2]
'kbukhxdf dxrc '
Nebo se dá napsat regulární výraz, kterému vyhoví vše, co je mezi závorkami. Najdu všechny výskyty (což se může hodit) a vezmu z nich ten poslední.
>>> import re
>>> prom = '    [cftyc vjv m]   [njkkuhb]   [kbukhxdf dxrc ] '
>>> re.findall(r'\[(.*?)\]', prom)[-1]
'kbukhxdf dxrc '
Těch způsobů se dá vymyslet spousta a dost záleží na tom, jak tolerantní a efektivní by měl ten "parser" být.

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.