Since you mentioned that key=value
pairs can appear in any order, here is one way of doing it with awk
.
zcat input.gz | awk -F= '
{
for(i=1;i<=NF;i++) {
if($i~/userAgent/) {
sub(/[^ ]+$/,"",$(i+1))
print "userAgent="$(i+1)
}
}
}'