জিএনইউ সহ grep
:
N=10; grep -roP ".{0,$N}foo.{0,$N}" .
ব্যাখ্যা:
-o
=> আপনি যা মেলে তা কেবল মুদ্রণ করুন
-P
=> পার্ল-স্টাইলের নিয়মিত এক্সপ্রেশন ব্যবহার করুন
- Regex 0 মেলে বলেছেন
$N
দ্বারা অনুসরণ অক্ষর foo
0 দ্বারা অনুসরণ $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 এটি, সামগ্রিক ম্যাচটি ব্যর্থ হওয়ার কারণ না হলে কোনও কিছুর সাথে মিল না রাখাকে পছন্দ করুন। সংক্ষেপে, যতটা সম্ভব অক্ষর মেলে।