В большинстве случаев, когда пишут скрипты, пользуются sed или awk, забывая, что это самые настоящие отдельные программки, запуск которых кушает ресурсы, что на обработке длинных текстов вполне себе ощутимо даже на современных машинках. Да и зачем вообще электричество лишний раз жечь :)
На примере обработки статистики unbound, где выдается длинная лопата вида
Цитата: total.num.queries=46626
total.num.queries_ip_ratelimited=0
total.num.cachehits=38639
total.num.cachemiss=7987
total.num.prefetch=3955
total.num.expired=0
total.num.recursivereplies=7987
total.requestlist.avg=0.843326
total.requestlist.max=40
total.requestlist.overwritten=0
total.requestlist.exceeded=0
total.requestlist.current.all=0
total.requestlist.current.user=0
total.recursion.time.avg=0.489479
total.recursion.time.median=0.0832953
total.tcpusage=0
time.now=1621414829.591092
time.up=746889.425198
time.elapsed=1.196692
во-первых, не хочется на получение каждого параметра запускать unbound-control отдельно, тем более, что параметры быстро меняются, а во-вторых, не хочется на каждую строку запускать даже cut
Если длина выделяемой подстроки фиксированная - делаем так:
это обозначает, что с 0 отсчитываем 10 символов и берем строку в 5 длиной. Но мне нужно другое, как видно, делаем так:
то есть берем подстроку до символа "=", а потом
берем от = и до конца строки
Код:
while read line;
do
nm=${line%=*}
if [[ $nm = "total.num.queries" ]]
then
TOTAL=${line#*=}
fi
done < <(unbound-control stats)
echo $TOTAL