Entry tags:
Работа с именованными группами в регулярных выражениях perl.
синтаксис:
принимает данные на стандартный вход, аргументы — имена групп: addr, date, method, uri, proto, code, size, referer и agent
печатает через таб адрес клиента и реферер.
или, более красиво:
(?<name>выражение)
, обратная ссылка \k<name>
, ссылка в коде $+{name}
.принимает данные на стандартный вход, аргументы — имена групп: addr, date, method, uri, proto, code, size, referer и agent
# perl -le 'while (<STDIN>) { m#^(?<addr>\S+) - - \[(?<date>.+?)\] "(?<method>\w+) (?<uri>\S+) (?<proto>\w+/\d+\.\d+)" (?<code>\d+) (?<size>\d+|-) "(?<referer>.+?)" "(?<agent>.+?)"# && print join "\t",@+{@ARGV}; }' addr referer < access_log
...
печатает через таб адрес клиента и реферер.
или, более красиво:
#! perl -l
my $re = qr/^(?<addr>\S+) - - \[(?<date>.+?)\] "(?<method>\w+) (?<uri>\S+) (?<proto>\w+/\d+\.\d+)" (?<code>\d+) (?<size>\d+|-) "(?<referer>.+?)" "(?<agent>.+?)"/;
while (<STDIN>) {
$_ =~ $re && print join "\t",@+{@ARGV};
}