Portál AbcLinuxu, 6. listopadu 2025 08:27
[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.