ইউনিক্স grep ফাইন্ডিং সঙ্গে শুরু ফাইল [প্যাটার্ন]


0

আমি একটি নির্দিষ্ট প্যাটার্ন দিয়ে শুরু হওয়া ফাইলগুলি সন্ধান করতে চাই, যেমন ফাইলের প্রথম লাইনটি প্যাটার্ন থাকা উচিত এবং তারপরে এই ফাইলের প্রথম 10 টি লাইন মুদ্রণ করা উচিত, এটি করার উপায় আছে কি?

ফাইলের প্রথম লাইন অনুসন্ধান করতে grep কে বলতে কোন উপায় আছে?

উত্তর:


2

আপনি স্ক্যান করতে হবে সব ফাইল এবং প্রথম লাইন পেতে, তারপর প্যাটার্ন জন্য চেক, অবশেষে প্রথম দশ লাইন একটি মুদ্রণ চালানো। এটা সত্যিই ব্যয়বহুল পেতে পারে।

find /path/to/search \
    -type f \
    -exec /bin/bash -c "head -n 1 '{}' | grep 'PATTERN' >/dev/null" \; \
    -exec head -n 10 \{\} \;

দ্য -type f চালানোর প্রয়োজন হয় না head ডিরেক্টরি, এবং grep আমরা তার প্রস্থান অবস্থা আগ্রহী শুধুমাত্র থেকে পুনঃনির্দেশিত হয়। দ্বিতীয় -exec শুধুমাত্র প্রথম টেস্ট পাস যারা ফাইল চালানো হবে।

আপনি ভাল আগে অতিরিক্ত পরীক্ষা যোগ করার পরামর্শ দেওয়া হবে -type f, স্ক্যান করা হবে যে ফাইল সংখ্যা কমাতে।


0

যদি awk একটি বিকল্প এই চেষ্টা করুন:

find . -type f -exec awk 'NR==1 && /PATTERN/ {x=1} NR>10 {exit} x' {} \;

আপনি নিম্নলিখিত হিসাবে পড়তে পারেন:

প্রথম লাইন PATTERN মেলে তারপর সেট x; যদি x তারপর সেট করুন বর্তমান লাইন প্রিন্ট (অন্তর্নিহিত কর্ম); 10 ম লাইনের পরেই প্রস্থান কর।

টেকনিক্যালি সর্বশেষ অবস্থা হতে হবে !x || NR>10 কিছু CPU চক্র সংরক্ষণ করতে, কিন্তু মূল সংস্করণ নিকার দেখায়। :)


0

এই দরকারী হতে হবে আশা করি।

grep -R -n "PATTERN" *.* | grep ":1:" | cut -d: -f1 | xargs head -n10

এটি পুনঃক্রমিকভাবে সাব-ডিরেক্টরি সহ কোন ফাইলগুলির জন্য অনুসন্ধান করবে এবং প্রথম লাইনগুলির জন্য ফিল্টার করবে এবং তারপরে সেই ফাইলগুলির জন্য প্রথম 10 টি লাইন মুদ্রণ করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.