নিয়মিত অভিব্যক্তি সহ নির্দিষ্ট ফাইলগুলির জন্য অনুসন্ধান করতে * nix find কমান্ডটি কীভাবে ব্যবহার করবেন


1

আমার CentOS এ আমার ফোল্ডার / লগে প্রচুর লগ ফাইল রয়েছে

/log/log.20120308
/log/log.20120308.1
/log/log.20120308.2
/log/log.20120308.3
/log/log.20120308.error
/log/log.20120308.error.1

আমি নীচে মত কমান্ড ব্যবহার করে দৃশ্যত

find /log -type f -iregex '.*/'log.20120308'.[0-9]*' -print

আমি শুধুমাত্র পাবেন

/log/log.20120308.1
/log/log.20120308.2
/log/log.20120308.3

আমি নীচের তালিকা পেতে সঠিক নিয়মিত অভিব্যক্তি আছে কিন্তু ব্যর্থ

/log/log.20120308
/log/log.20120308.1
/log/log.20120308.2
/log/log.20120308.3

আমি এক্সটেনশান 1, .2, .3 বা ফাঁকা নির্বাচন নিয়মিত অভিব্যক্তি খুঁজে বের করতে পারে নি

উত্তর:


3
find /log -type f -iregex '.*/'log.20120308'\(\.[0-9]*\)?' -print

দ্য ? এক বা কেউ নির্দেশ করে, এবং আপনি বিন্দু ([0-9] আগে ডট ম্যাচ থেকে পালাতে হবে সব ), তাই যদি আপনি বিন্দু থেকে পালাতে না, আপনি পাবেন /log/log.20120308_1 ফলে যদি ফাইল বিদ্যমান থাকে।


আমি এই সংস্করণ পছন্দ। এবং মনে রাখবেন যে আপনি যে শেষ ছেড়ে দিতে পারেন * যদি আপনি শুধুমাত্র পরে একক সংখ্যা সংখ্যা আছে . যে আপনি খুঁজে পেতে চান।
Lars Rohrbach

2

এক সংস্করণ:

find /log -type f -iregex '.*/'log.20120308'[.0-9]*' -print

অবশ্যই, এটি নামে একটি ফাইল নির্বাচন করবে /log/log.20120308..কিন্তু আমি কল্পনা করি না যে এটি সম্ভবত একটি সমস্যা।

অন্য উপায় ব্যবহার করা হবে -o একটি "বা" অপারেটর হিসাবে, অপারেডগুলির চারপাশে পালিয়ে যাওয়া বন্ধনী সহ:

find /log -type f \( -iregex '.*/'log.20120308'.[0-9]*' -o -iregex '.*/'log.20120308 \) -print

ওহ, ব্যবহারের জন্য আরও একটি আপডেট -iregex: আপনি সহজেই আপনার কিছু উদ্ধৃত করতে পারেন, যেহেতু '.*/log.20120308.[0-9]*' হিসাবে একই নির্বাচন করবে '.*/'log.20120308'.[0-9]*' @ এমডি-গাও এর পরামর্শের সাথে একত্রিত করে, আপনি এই সংস্করণটি পেতে পারেন:

find /log -type f -iregex '.*/log.20120308\(\.[0-9]\)?' -print
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.