ধরে নিই যে আপনি আপনার প্যাটার্নের সাথে পুরো লাইনটি জিএনইউয়ের সাথে মেলে করতে চান sed
, এটি কাজ করে:
sed -n '/^dog 123 4335$/ { :a; n; p; ba; }' infile
মান সমতুল্য:
sed -ne '/^dog 123 4335$/{:a' -e 'n;p;ba' -e '}' infile
নিম্নলিখিত ইনপুট সহ ( infile
):
cat 13123 23424
deer 2131 213132
bear 2313 21313
dog 123 4335
cat 13123 23424
deer 2131 213132
bear 2313 21313
আউটপুটটি হ'ল:
cat 13123 23424
deer 2131 213132
bear 2313 21313
ব্যাখ্যা:
/^dog 123 4335$/
পছন্দসই নিদর্শন জন্য অনুসন্ধান।
:a; n; p; ba;
একটি লুপ যা ইনপুট ( n
) থেকে একটি নতুন লাইন নিয়ে আসে , এটি প্রিন্ট করে ( p
), এবং শাখাগুলি আবার লেবেল লেবেল করে :a; ...; ba;
।
হালনাগাদ
আপনার প্রয়োজনের নিকটে আসে এমন একটি উত্তর এখানে দেওয়া হয়েছে, যেমন ফাইল 2-তে প্যাটার্ন, ফাইল 1 থেকে গ্রেপিং:
tail -n +$(( 1 + $(grep -m1 -n -f file2 file1 | cut -d: -f1) )) file1
এম্বেডেড গ্রেপ এবং কাট ফাইল 2 থেকে একটি প্যাটার্নযুক্ত প্রথম লাইনটি সন্ধান করে, এই লাইন নম্বরটি প্লাস একটিকে লেজ হিসাবে দেওয়া হয়, প্যাটার্নটির সাথে রেখাটি এড়িয়ে যাওয়ার জন্য প্লাস এক রয়েছে।
আপনি যদি প্রথম ম্যাচের পরিবর্তে শেষ ম্যাচ থেকে শুরু করতে চান তবে তা হ'ল:
tail -n +$(( 1 + $(grep -n -f file2 file1 | tail -n1 | cut -d: -f1) )) file1
নোট করুন যে লেজের সমস্ত সংস্করণ প্লাস-স্বরলিপি সমর্থন করে না।