Con grep -o, tendrá que coincidir exactamente con lo que desea extraer. Como no desea extraer la proto=cadena, no debe coincidir con ella.
Una expresión regular extendida que coincidiría con tcpo udpseguida de una barra y alguna cadena alfanumérica no vacía es
(tcp|udp)/[[:alnum:]]+
Aplicando esto en sus datos:
$ grep -E -o '(tcp|udp)/[[:alnum:]]+' file
tcp/http
tcp/https
udp/dns
Para asegurarnos de que solo hacemos esto en las líneas que comienzan con la cadena proto=:
grep '^proto=' file | grep -E -o '(tcp|udp)/[[:alnum:]]+'
Con sed, eliminar todo antes del primer =y después del primer carácter en blanco:
$ sed 's/^[^=]*=//; s/[[:blank:]].*//' file
tcp/http
tcp/https
udp/dns
Para asegurarse de que solo hacemos esto en las líneas que comienzan con la cadena proto=, puede insertar el mismo paso de preprocesamiento con el grepanterior, o puede usar
sed -n '/^proto=/{ s/^[^=]*=//; s/[[:blank:]].*//; p; }' file
Aquí, suprimimos la salida predeterminada con la -nopción, y luego activamos las sustituciones y una impresión explícita de la línea solo si la línea coincide ^proto=.
Con awk , usando el separador de campo predeterminado, y luego dividiendo el primer campo =e imprimiendo el segundo bit:
$ awk '{ split($1, a, "="); print a[2] }' file
tcp/http
tcp/https
udp/dns
Para asegurarse de que solo hacemos esto en las líneas que comienzan con la cadena proto=, puede insertar el mismo paso de preprocesamiento con el grepanterior, o puede usar
awk '/^proto=/ { split($1, a, "="); print a[2] }' file