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 tcp
o udp
seguita 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 grep
come sopra, oppure puoi usare
sed -n '/^proto=/{ s/^[^=]*=//; s/[[:blank:]].*//; p; }' file
Qui, sopprimiamo l'output predefinito con l' -n
opzione, 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 grep
come sopra, oppure puoi usare
awk '/^proto=/ { split($1, a, "="); print a[2] }' file