com awk :
awk '{print gensub("(.*/[^.]+)\..*", "\1", 1, ) }'
-
printimprime os campos obrigatórios sem qualquer modificação, com apenas a parte obrigatória do sétimo campo sendo extraída comgensub() -
Em
gensub("(.*/[^.]+)\..*", "\1", 1, ), o padrão Regex"(.*/[^.]+)\..*"corresponde à parte anterior ao.após o último/e coloca isso no grupo capturado1e, em seguida, o restante como correspondências por% código%. Na substituição apenas o grupo capturado é usado para obter apenas essa parte -
No padrão Regex
\..*, a parte dentro do grupo capturado(.*/[^.]+)\..*, ou seja, em(),.*/[^.]+corresponde com avidez até o último.*/, então/corresponde à parte até o próximo[^.]+, isso é mantido como grupo capturado 1, já que essa é a parte desejada, e usaremos o grupo em substituição, então.corresponde a um literal\., então.corresponde ao restante da string
Do comentário, se você quiser manter .* dentro da correspondência, ou seja, . também:
awk '{print gensub("(.*/[^.]+\.).*", "\1", 1, ) }'
Exemplo:
% awk '{print gensub("(.*/[^.]+)\..*", "\1", 1, ) }' <<<'158.45.456.756 - - [04/Feb/2016:10:51:24 -0500] "GET /tiles/1.0.0/cd/base/1/85/785.png?wb75678545=75D2503E HTTP/1.1" 200 8848 "http://site/map.html" "Mozilla/5.0 (Windows NT 6.1; MOM64; Trident/7.0; mv:10.0) like Blah"'
[04/Feb/2016:10:51:24-0500]/tiles/1.0.0/cd/base/1/85/7852008848
% awk '{print gensub("(.*/[^.]+\.).*", "\1", 1, ) }' <<<'158.45.456.756 - - [04/Feb/2016:10:51:24 -0500] "GET /tiles/1.0.0/cd/base/1/85/785.png?wb75678545=75D2503E HTTP/1.1" 200 8848 "http://site/map.html" "Mozilla/5.0 (Windows NT 6.1; MOM64; Trident/7.0; mv:10.0) like Blah"'
[04/Feb/2016:10:51:24-0500]/tiles/1.0.0/cd/base/1/85/785.2008848