Dengan grep -o
, Anda harus mencocokkan apa yang ingin Anda ekstrak. Karena Anda tidak ingin mengekstraksi proto=
string, Anda tidak harus mencocokkannya.
Ekspresi reguler yang diperluas yang akan cocok dengan tcp
atau udp
diikuti oleh garis miring dan beberapa string alfanumerik yang tidak kosong adalah
(tcp|udp)/[[:alnum:]]+
Menerapkan ini pada data Anda:
$ grep -E -o '(tcp|udp)/[[:alnum:]]+' file
tcp/http
tcp/https
udp/dns
Untuk memastikan bahwa kami hanya melakukan ini pada baris yang dimulai dengan string proto=
:
grep '^proto=' file | grep -E -o '(tcp|udp)/[[:alnum:]]+'
Dengan sed
, menghapus semuanya sebelum karakter pertama =
dan sesudah karakter kosong pertama:
$ sed 's/^[^=]*=//; s/[[:blank:]].*//' file
tcp/http
tcp/https
udp/dns
Untuk memastikan bahwa kami hanya melakukan ini pada baris yang dimulai dengan string proto=
, Anda bisa memasukkan langkah pra-pemrosesan yang sama dengan grep
seperti di atas, atau Anda bisa menggunakan
sed -n '/^proto=/{ s/^[^=]*=//; s/[[:blank:]].*//; p; }' file
Di sini, kami menekan output default dengan -n
opsi, dan kemudian kami memicu penggantian dan cetak eksplisit baris hanya jika baris cocok ^proto=
.
Dengan awk
, menggunakan pemisah bidang default, dan kemudian membelah bidang pertama =
dan mencetak bit kedua:
$ awk '{ split($1, a, "="); print a[2] }' file
tcp/http
tcp/https
udp/dns
Untuk memastikan bahwa kami hanya melakukan ini pada baris yang dimulai dengan string proto=
, Anda bisa memasukkan langkah pra-pemrosesan yang sama dengan grep
seperti di atas, atau Anda bisa menggunakan
awk '/^proto=/ { split($1, a, "="); print a[2] }' file