Portál AbcLinuxu, 8. listopadu 2025 10:15
\e[1;30mblabla\e[0m - \e[1;31mblabla\e[0m - \e[1;32mblabla\e[0m - \e[1;33mblabla\e[0ma potřebuji zjistit počet znaků včetně mezer, jenže potřebuji spočítat pouze tyto znaky bez těch sraček okolo...
blabla - blabla - blabla - blablaporadí někdo jednoduché řešení? Děkuji
${#${řetežec sem}}. Ale to v bashi asi nebude.
${#parameter}
The length in characters of the expanded value of parameter is substituted. If parameter is ‘*’ or ‘@’, the value substituted is the number of positional parameters. If parameter is an array name subscripted by ‘*’ or ‘@’, the value substituted is the number of elements in the array.
man zshexpn dává určitou naději při použití něčeho takového:${(g::)#řetezec}
${(g::)#${proměnná}}
Inkriminovaná část manuálové stránky říká toto:
Parameter Expansion Flags
...
g:opts:
Process escape sequences like the echo builtin when no options are given (g::)...
V Bashi jsem nic podobného nenašel. Ale vyzkoušené to nemám.
Jop, platí, spletl jsem se.Jen jsem se ujišťoval.
V Bashi jsem nic podobného nenašel. Ale vyzkoušené to nemám.Nojo, jenže v bashi se echo chová velice předvídatelně a bez dalších voleb nic takového nedělá. Já bych asi pustil echo -e, pak bych z toho vybral jen tisknutelné znaky, a nakonec bych to nechal spočítat.
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
color='\e[1;30mblabla\e[0m - \e[1;31mblabla\e[0m - \e[1;32mblabla\e[0m - \e[1;33mblabla\e[0m'
nocolor="${color//\\e!(*m*)m/}"
length=${#nocolor}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.