Комментарии 8
[maxline++] = strdup(buffer + 9);
Обожаю этот стиль с инкрементами и волшебными константами.
Странная иллюстрация получилась. Зачем писать однострочник в виде простыни кода на С?
но при таком подходе задача неоправданно усложняется. Предлагаю просто взять и написать код на C.
полторы страницы кода — это «проще»?
В принципе задача сводится к парсингу строки по регулярному выражению. Вот тут
stackoverflow.com/questions/1891797/capturing-groups-from-a-grep-regex
куча вариаций. В том числе даже на чистом bash и выглядит это намного проще полутора страниц С.
Можно с другой стороны. Привести все к такому строковому виду, который правильно сортируется. Для этого достаточно добавить к одноциферным номерам лидирующий ноль, что легко делается с помощью sed. Номера устройств от 0 до 99 отлично отсортируются.
Конвеер будет df | sed | sort
Конвеер будет df | sed | sort
братуха, держи решение на perl, потрачено 2 минуты
df | perl -nE 'my $line=$_; if($line=~/^\/dev\/loop(\d+)/){printf("%d %s", $1, $line)}' |sort -n
Про межпроцессное взаимодействие написано интересно и легко читается. А вот с конвейером пример неудачный. Идеология юникса - максимально использовать готовое, а не писать в подобных случаях по странице С-кода .
В данном случае, что-нибудь вроде "...|sort -n -k 1.9 " решило бы проблему
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Кунг-фу стиля Linux: простые конвейеры