জিএনইউ সহ grep:
N=10; grep -roP ".{0,$N}foo.{0,$N}" .
ব্যাখ্যা:
-o => আপনি যা মেলে তা কেবল মুদ্রণ করুন
-P => পার্ল-স্টাইলের নিয়মিত এক্সপ্রেশন ব্যবহার করুন
- Regex 0 মেলে বলেছেন
$Nদ্বারা অনুসরণ অক্ষর foo0 দ্বারা অনুসরণ $Nঅক্ষর।
আপনার যদি জিএনইউ না থাকে grep:
find . -type f -exec \
perl -nle '
BEGIN{$N=10}
print if s/^.*?(.{0,$N}foo.{0,$N}).*?$/$ARGV:$1/
' {} \;
ব্যাখ্যা:
যেহেতু আমরা আর grepজিএনইউ হওয়ার উপর নির্ভর করতে পারি না grep, তাই আমরা findপুনরাবৃত্তভাবে ফাইলগুলির জন্য অনুসন্ধান করতে ( -rজিএনইউ এর ক্রিয়া grep) ব্যবহার করি। পাওয়া প্রতিটি ফাইলের জন্য, আমরা পার্ল স্নিপেট কার্যকর করি।
পার্ল সুইচ:
-n এক লাইনে ফাইল লাইন পড়ুন
-l প্রতিটি লাইনের শেষে নিউলাইনটি সরান এবং মুদ্রণের সময় এটি আবার রেখে দিন
-e নিম্নলিখিত স্ট্রিং কোড হিসাবে আচরণ করুন
পার্ল স্নিপেট মূলত একই জিনিসটি করছে grep। এটি আপনার পছন্দসই $Nপ্রসঙ্গের অক্ষরের সংখ্যার ক্ষেত্রে একটি ভেরিয়েবল সেট করে শুরু হয় । এর BEGIN{}অর্থ এটি প্রতিটি ফাইলে প্রতিটি লাইনের জন্য একবার নয় একবার মৃত্যুদন্ড কার্যকর করার সময় কার্যকর করা হয়।
প্রতিটি লাইনের জন্য সম্পাদিত বিবৃতিটি রেজেক্সে প্রতিস্থাপন কাজ করে তবে লাইনটি মুদ্রণ করা।
রেজেক্স:
- যে কোনও পুরানো জিনিসটি অলসভাবে 1 টি লাইন (
^.*?) এর শুরুতে এবং তার পরে .{0,$N}যেমনটি grepঅনুসরণ করুন এবং fooতারপরে .{0,$N}লাইন ( .*?$) এর শেষ অবধি কোনও পুরানো জিনিসটি আলস্যভাবে মেলান ।
- আমরা এটির পরিবর্তে
$ARGV:$1। $ARGVএকটি মায়াবী ভেরিয়েবল যা বর্তমান ফাইলটির নাম পড়ে। $1প্যারেনস কী মিলেছে: এই ক্ষেত্রে প্রসঙ্গে।
- উভয় প্রান্তে অলস ম্যাচগুলি প্রয়োজনীয় কারণ কোনও লোভী ম্যাচটি ম্যাচটি
fooব্যর্থ না করে আগে সমস্ত অক্ষর খায় (যেহেতু .{0,$N}শূন্য বারের সাথে মেলানোর অনুমতি দেওয়া হয়)।
1 এটি, সামগ্রিক ম্যাচটি ব্যর্থ হওয়ার কারণ না হলে কোনও কিছুর সাথে মিল না রাখাকে পছন্দ করুন। সংক্ষেপে, যতটা সম্ভব অক্ষর মেলে।