İle grep -o
, ayıklamak istediğinizle tam olarak eşleşmeniz gerekir. Dizeyi ayıklamak istemediğiniz için proto=
dizeyle eşleşmemelisiniz.
Bir eğik çizgi ve bazı boş olmayan alfasayısal dizeyle eşleşecek tcp
veya udp
bunları izleyecek genişletilmiş normal bir ifade
(tcp|udp)/[[:alnum:]]+
Bunu verilerinize uygulama:
$ grep -E -o '(tcp|udp)/[[:alnum:]]+' file
tcp/http
tcp/https
udp/dns
Bunu yalnızca dizeyle başlayan satırlarda yaptığımızdan emin olmak için proto=
:
grep '^proto=' file | grep -E -o '(tcp|udp)/[[:alnum:]]+'
İle sed
, =
ilk boş karakterden önce ve ilk boş karakterden sonra her şeyi kaldırmak :
$ sed 's/^[^=]*=//; s/[[:blank:]].*//' file
tcp/http
tcp/https
udp/dns
Bunu yalnızca dizeyle başlayan satırlarda yaptığımızdan emin olmak için yukarıdaki proto=
ile aynı ön işleme adımını ekleyebilir grep
veya
sed -n '/^proto=/{ s/^[^=]*=//; s/[[:blank:]].*//; p; }' file
Burada, varsayılan çıktıyı -n
seçenekle bastırırız ve sonra ikameleri ve satırın açık bir baskısını yalnızca çizgi eşleşirse tetikleriz^proto=
.
İle awk
, varsayılan alan ayırıcısını kullanarak ve ardından ilk alanı bölüp =
ikinci bitini yazdırın:
$ awk '{ split($1, a, "="); print a[2] }' file
tcp/http
tcp/https
udp/dns
Bunu yalnızca dizeyle başlayan satırlarda yaptığımızdan emin olmak için yukarıdaki proto=
ile aynı ön işleme adımını ekleyebilir grep
veya
awk '/^proto=/ { split($1, a, "="); print a[2] }' file