LINUX.ORG.RU

История изменений

Исправление Zmicier, (текущая версия) :

Не слушайте всяких crutch_master’ов, и не прыгайте на всякие Перлы и прочие, а подучите лучше нормально ГНУ Баш, если уж взялись за него.

Что до задачки, то первые две (или не две) строчки в образце у вас очевидно сломаны, так что их обработку сами сделаете, а в остальном как-то так должно быть можно:

#!/bin/bash

while IFS+=':' read key val; do
    case "$key" in
        '*-disk')
            flag=1
            printf '%s' "$key"
            ;;
        'размер')
            [[ $flag ]] || continue
            if [[ $val =~ ([0-9]+)(.iB).* ]]; then
                printf ' %d %s\n' \
                       "${BASH_REMATCH[1]}" "${BASH_REMATCH[2],,}"
            else
                printf '\n'
            fi
            ;;
    esac
done

Не проверял. Могут быть ошибки вплоть до синтаксических.

Комментарии нужны?

Исходная версия Zmicier, :

Не слушайте всяких crutch_master’ов, и не прыгайте на всякие Перлы и прочие, а подучите лучше нормально ГНУ Баш, если уж взялись за него.

Что до задачки, то первые две строчки в образце у вас очевидно сломаны, так что их обработку сами сделаете, а в остальном как-то так должно быть можно:

#!/bin/bash

while IFS+=':' read key val; do
    case "$key" in
        '*-disk')
            flag=1
            printf '%s' "$key"
            ;;
        'размер')
            [[ $flag ]] || continue
            if [[ $val =~ ([0-9]+)(.iB).* ]]; then
                printf ' %d %s\n' \
                       "${BASH_REMATCH[1]}" "${BASH_REMATCH[2],,}"
            else
                printf '\n'
            fi
            ;;
    esac
done

Не проверял. Могут быть ошибки вплоть до синтаксических.

Комментарии нужны?