Portál AbcLinuxu, 14. července 2025 08:38
[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.
[marian@alf ~]$ prom='[cftyc vjv m] [njkkuhb] [kbukhxdf dxrc]' [marian@alf ~]$ echo $prom|sed -e 's/^.*\[\(.*\)\]$/\1/' kbukhxdf dxrc
p='[cftyc vjv m] [njkkuhb] [kbukhxdf dxrc]' px=`$p|sed -e 's/^.*\[\(.*\)\]$/\1/'` echo $px bash: [cftyc: command not found
[marian@alf ~]$ p='[cftyc vjv m] [njkkuhb] [kbukhxdf dxrc]' [marian@alf ~]$ px=`echo $p|sed -e 's/^.*\[\(.*\)\]$/\1/'` [marian@alf ~]$ echo $px kbukhxdf dxrcTo echo tam je, aby vypsalo $p do roury, ze které čte sed.
px=`$p|sed -e 's/^.*\[\(.*\)\]$/\1/'`
na px=`echo "$p"|sed -e 's/^.*\[\(.*\)\]$/\1/'`
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
>>> 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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.