এর সাথে grep -o, আপনি কী বের করতে চান ঠিক তার সাথে মিলতে হবে। যেহেতু আপনি proto=স্ট্রিংটি বের করতে চান না , আপনার এটির সাথে মিল পাওয়া উচিত নয়।
একটি বর্ধিত নিয়মিত অভিব্যক্তি যা মিলে যাবে tcpবা তার udpপরে স্ল্যাশের সাথে মিলবে এবং কিছু খালি অ্যালফানিউমারিক স্ট্রিং
(tcp|udp)/[[:alnum:]]+
আপনার ডেটাতে এটি প্রয়োগ করা:
$ grep -E -o '(tcp|udp)/[[:alnum:]]+' file
tcp/http
tcp/https
udp/dns
আমরা কেবল স্ট্রিংয়ের সাথে শুরু হওয়া লাইনে এটি করি তা নিশ্চিত করার জন্য proto=:
grep '^proto=' file | grep -E -o '(tcp|udp)/[[:alnum:]]+'
সঙ্গে sedপ্রথম আগে সবকিছু সরানো, =এবং প্রথম ফাঁকা অক্ষর পরে:
$ sed 's/^[^=]*=//; s/[[:blank:]].*//' file
tcp/http
tcp/https
udp/dns
স্ট্রিং দিয়ে শুরু হওয়া লাইনে আমরা এটিই করি তা নিশ্চিত করার জন্য proto=, আপনি grepউপরের মতো একই প্রাক প্রসেসিং পদক্ষেপটি সন্নিবেশ করতে পারেন, বা আপনি ব্যবহার করতে পারেন
sed -n '/^proto=/{ s/^[^=]*=//; s/[[:blank:]].*//; p; }' file
এখানে, আমরা -nবিকল্পটি দিয়ে ডিফল্ট আউটপুটটি দমন করি এবং তারপরে লাইনটি মেলে তবেই আমরা বিকল্পগুলি এবং লাইনটির একটি স্পষ্ট প্রিন্ট ট্রিগার করি ^proto=।
সাথে awk, ডিফল্ট ক্ষেত্র বিভাজক ব্যবহার করে এবং তারপরে প্রথম ক্ষেত্রটি বিভক্ত করে =এবং এর দ্বিতীয় বিটটি মুদ্রণ করে:
$ awk '{ split($1, a, "="); print a[2] }' file
tcp/http
tcp/https
udp/dns
স্ট্রিং দিয়ে শুরু হওয়া লাইনে আমরা এটিই করি তা নিশ্চিত করার জন্য proto=, আপনি grepউপরের মতো একই প্রাক প্রসেসিং পদক্ষেপটি সন্নিবেশ করতে পারেন, বা আপনি ব্যবহার করতে পারেন
awk '/^proto=/ { split($1, a, "="); print a[2] }' file