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 tcp
o udp
seguida 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 grep
anterior, o puede usar
sed -n '/^proto=/{ s/^[^=]*=//; s/[[:blank:]].*//; p; }' file
Aquí, suprimimos la salida predeterminada con la -n
opció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 grep
anterior, o puede usar
awk '/^proto=/ { split($1, a, "="); print a[2] }' file