Con grep -o, dovrai abbinare esattamente ciò che vuoi estrarre. Dato che non vuoi estrarre la proto=stringa, non dovresti abbinarla.
È un'espressione regolare estesa che corrisponderebbe tcpo udpseguita da una barra e una stringa alfanumerica non vuota
(tcp|udp)/[[:alnum:]]+
Applicando questo sui tuoi dati:
$ grep -E -o '(tcp|udp)/[[:alnum:]]+' file
tcp/http
tcp/https
udp/dns
Per assicurarci di farlo solo su righe che iniziano con la stringa proto=:
grep '^proto=' file | grep -E -o '(tcp|udp)/[[:alnum:]]+'
Con sed, rimuovendo tutto prima del primo =e dopo il primo carattere vuoto:
$ sed 's/^[^=]*=//; s/[[:blank:]].*//' file
tcp/http
tcp/https
udp/dns
Per assicurarci che lo facciamo solo su righe che iniziano con la stringa proto=, puoi inserire la stessa fase di pre-elaborazione grepcome sopra, oppure puoi usare
sed -n '/^proto=/{ s/^[^=]*=//; s/[[:blank:]].*//; p; }' file
Qui, sopprimiamo l'output predefinito con l' -nopzione, quindi attiviamo le sostituzioni e una stampa esplicita della riga solo se la riga corrisponde ^proto=.
Con awk, utilizzando il separatore di campo predefinito, quindi suddividere il primo campo =e stamparne il secondo bit:
$ awk '{ split($1, a, "="); print a[2] }' file
tcp/http
tcp/https
udp/dns
Per assicurarci che lo facciamo solo su righe che iniziano con la stringa proto=, puoi inserire la stessa fase di pre-elaborazione grepcome sopra, oppure puoi usare
awk '/^proto=/ { split($1, a, "="); print a[2] }' file