এখানে একটি sed
পদ্ধতির:
$ sed -nE '1s/.{11}(.{8}).*/\1/p; 3s/.{3}(.{4}).*/\1/p' file
Ethernet
t6 a
ব্যাখ্যা
-n
শুষে স্বাভাবিক আউটপুট যাতে এটি শুধুমাত্র ছাপে যখন বলা (সাধারণ প্রত্যেক ইনপুট লাইন প্রিন্ট করতে হয়)। -E
বর্ধিত রেগুলার এক্সপ্রেশনের দেয়।
sed
স্ক্রিপ্ট দুই কমান্ড, উভয় প্রতিকল্পন অপারেটর ব্যবহার আছে ( s/original/replacement/
)। উইলটি কেবল 1s/.{11}(.{8}).*/\1/p
প্রথম লাইনে চলবে (এটিই কি 1s
করে) এবং লাইনটির প্রথম 11 টি অক্ষরের সাথে মিলবে ( .{11}
), তারপরে এটি পরবর্তী 8 টি ক্যাপচার করবে ( (.{8})
, প্রথম বন্ধনী একটি "ক্যাপচার গ্রুপ") এবং তারপরে বাকি সমস্ত কিছু থাকবে লাইনের শেষ ( .*
)। এই সমস্ত ক্যাপচার গ্রুপে যা ছিল তা দিয়ে প্রতিস্থাপন করা হয়েছে ( \1
; যদি দ্বিতীয় ক্যাপচার গ্রুপ থাকত তবে তা হবে \2
ইত্যাদি)। অবশেষে, p
শেষে ( s/foo/bar/p
) প্রতিস্থাপনটি তৈরি করার পরে লাইনটি মুদ্রণের কারণ ঘটায়। এর ফলে কেবলমাত্র 8 টি অক্ষরের আউটপুট হচ্ছে।
দ্বিতীয় কমান্ডটি একই সাধারণ ধারণা ব্যতীত এটি কেবল ২ য় লাইনে চলবে ( 3s
) এবং 4 টি অক্ষর 4 থেকে শুরু করবে।
আপনি একই জিনিসটি এর সাথেও করতে পারেন perl
:
$ perl -ne 'if($.==1){s/.{11}(.{8}).*/\1/}
elsif($.==3){s/.{3}(.{4}).*/\1/}
else{next}; print; ' file
Ethernet
t6 a
ব্যাখ্যা
-ne
মানে হলো "লাইন দ্বারা ইনপুট ফাইল লাইন পড়া এবং স্ক্রিপ্ট দেওয়া প্রয়োগ -e
প্রতিটি লাইনে করতে। স্ক্রিপ্ট আগের মতই মৌলিক ধারণা। $.
পরিবর্তনশীল তাই আমরা পরীক্ষা হলে লাইন সংখ্যা পারেন বর্তমান লাইন সংখ্যা ঝুলিতে 1
বা 3
, যদি সুতরাং, বিকল্পটি চালান, অন্যথায় এড়িয়ে যান Therefore সুতরাং print
কেবলমাত্র এই দুটি লাইনের জন্য কেবল চালানো হবে যেহেতু অন্য সমস্ত এড়িয়ে চলে যাবে।
অবশ্যই, এটি পার্ল, সুতরাং টিমটোড্ডি :
$ perl -F"" -lane '$. == 1 && print @F[11..19]; $.==3 && print @F[3..6]' file
Ethernet
t6 a
ব্যাখ্যা
এখানে, এর -a
অর্থ "প্রদত্ত অক্ষরটিতে প্রতিটি ইনপুট লাইন বিভক্ত করুন -F
এবং অ্যারে হিসাবে সংরক্ষণ করুন @F
given প্রদত্ত চরিত্রটি খালি থাকায় এটি ইনপুট লাইনের প্রতিটি অক্ষরকে উপাদান হিসাবে সংরক্ষণ করবে @F
Then অ্যারেগুলি 0
প্রথম লাইনের জন্য এবং তৃতীয়টির জন্য 3-7- এ গণনা শুরু করে ।