Попробуйте это:
stat -c "%s %s %n" ubuntu-mini-remix-16.04-amd64.iso | awk '{ byte =$1 /1024/1024; print byte "M\t"$2"\t"$3 }'
awk
рассчитает размер файла в МБ путем деления файла на /1024/1024
и отобразит все.
Чтобы извлечь только бит headerx
из трех строк, которые вы показываете с помощью команды s///
в sed
, вам нужно будет удалить все биты строки, которые вы не хочу.
Биты строки, которые вам не нужны, это начальная строка #include <dir/
в начале и конечная строка >
в конце. Все это должно соответствовать вашему регулярному выражению. Затем также используйте группу захвата для бита в -между начальной и конечной строками, чтобы заменить всю строку захваченной строкой :
sed -n 's,.*/\(.*\)>,\1,p' file.c
или, точнее,
sed -n 's,^#include <dir/\(.*\)>,\1,p' file.c
Вы не отбрасываете первую часть совпадения, поэтому вы можете исправить свой код, чтобы сделать это.. согласно @kusalananada
В качестве альтернативы универсальное совпадение с использованием инвертированного шаблона
sed -En "s|[^/]+/([^>]+)>|\1|p" file
Для конкретного совпадения для#include
sed -En "s|^#include <dir/([^>]+)>|\1|p" file
Или с grep
хоть ты
grep -Po "(?<=#include <dir/)[^>]+" file
Или сgawk
awk -F"/|>" '$1~include{print $(NF-1)}' file