регулярное выражение в sed не работает как в PCRE

Попробуйте это:

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и отобразит все.

0
11.05.2020, 21:01
2 ответа

Чтобы извлечь только бит headerxиз трех строк, которые вы показываете с помощью команды s///в sed, вам нужно будет удалить все биты строки, которые вы не хочу.

Биты строки, которые вам не нужны, это начальная строка #include <dir/в начале и конечная строка >в конце. Все это должно соответствовать вашему регулярному выражению. Затем также используйте группу захвата для бита в -между начальной и конечной строками, чтобы заменить всю строку захваченной строкой :

.
sed -n 's,.*/\(.*\)>,\1,p' file.c

или, точнее,

sed -n 's,^#include <dir/\(.*\)>,\1,p' file.c
0
28.04.2021, 23:15

Вы не отбрасываете первую часть совпадения, поэтому вы можете исправить свой код, чтобы сделать это.. согласно @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
0
28.04.2021, 23:15

Теги

Похожие вопросы