লিনাক্স রিজেক্স সন্ধান করে - আমি কি ম্যাচের পরিবর্তে 'অনুসন্ধান' ব্যবহার করতে পারি?


0

findউপযোগ শক্তিশালী, কিন্তু আমি কিছু অতিরিক্ত বৈশিষ্ট্য প্রয়োজন চাই।

এটির -regexঅনুসন্ধান প্রতিটি ফাইলের নাম (বা ডাইরনাম )টিকে স্ট্রিং হিসাবে বিবেচনা করে এবং কেবল নামের শুরুতে প্রদত্ত রেইগেক্স প্রয়োগ করে। অজগর মত re.match(..)। যদি এটি কোনও ম্যাচ তৈরি করে না, এটি পাওয়া যাবে না।

উদাহরণস্বরূপ, যদি আমি 'লগ' সম্বলিত ফাইলগুলি সন্ধান করতে চাই, (আমি জানি যে ফাইলগুলি সন্ধানের আরও সহজ উপায় রয়েছে যার ফাইলের নামটিতে রেগেক্স ছাড়াই 'লগ' রয়েছে তবে এটি কেবল উদাহরণের জন্য)

$ find -regex 'log'
(nothing)

$ find -regex '\./.*log.*$'
./log9
./log7
./log5
./log0
./log2
./log4
./log6
./log8
./log3
./log1

সুতরাং, এমন কোনও উপায় findরয়েছে -regexযা ফাইলনামগুলিতে, যেমন grepঅজগরের মতো রেজেক্স ব্যবহার করে re.search(..)- কেবল স্ট্রিংয়ের শুরুতেই নয়, যেখানে কোথাও এটি মেলে?

উত্তর:


0

রেজেক্স কেবল শুরুতে প্রয়োগ করা হয় না, এটি পুরো স্ট্রিংয়ে প্রয়োগ করা হয় । আপনার কেবলমাত্র সঠিক রেজেেক্স দেওয়া দরকার যা পুরো ফাইলটির নাম ধারণ করে:

$ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Oct  6 15:46 aaafoo
-rw-r--r-- 1 terdon terdon 0 Oct  6 15:46 aaafooaaa
-rw-r--r-- 1 terdon terdon 0 Oct  6 15:46 fooaaa
$ find . -regex ".*foo.*"  
./aaafoo
./aaafooaaa
./fooaaa
$ find . -regex "^./foo.*"  
./fooaaa
$ find . -regex ".*foo"
./aaafoo

আপনি সম্ভবত -nameপরীক্ষার সন্ধান করছেন যা নিয়মিত অভিব্যক্তি নয়, গ্লোব লাগে takes

$ find  . -name "*foo*" 
./aaafoo
./aaafooaaa
./fooaaa

ধন্যবাদ, তবে আপনার উদাহরণটি স্পষ্টভাবে ইঙ্গিত করে যে সমস্ত রেইগেক্স কেবলমাত্র শুরুতে প্রয়োগ করা হয় (এবং এটি একটি ম্যাচ তৈরি করে, কারণ কারণে .*বা ^./রেগেক্সের শুরুতে, যদি রেজেক্সগুলি কেবল স্ট্রিংয়ের শুরুতে চেষ্টা না করা হয় তবে এটি অপ্রয়োজনীয় হবে। ) -nameকেবল গ্লোবগুলির জন্য .. সুতরাং, অনুমান করুন একমাত্র সমাধান হ'ল আমাকে আরও দীর্ঘকালীন রেজিজেস লিখছি।
thkang

1
@ থ্যাঙ্কং আমি যা বলছি তা হ'ল রেজেক্সের শুরু থেকে শেষ পর্যন্ত পুরো স্ট্রিংটি বর্ণনা করা দরকার । এটি কেবল শুরুর সাথে মিলে যায় না এটি পুরো জিনিসের সাথে মিলে যায়। কোনও ফাইলের নাম নেই যা আপনি সেভাবে বর্ণনা করতে পারবেন না। কেবল একটি যুক্ত করা .*আপনাকে স্ট্রিংয়ের মধ্যে যে কোনও জায়গায় মেলাতে দেয়। আমি কোনও ফাইল নামের কোনও উদাহরণের জন্য ভাবতে পারি না যার জন্য আমি একটি রেজেেক্স লিখতে পারি নি।
টেরডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.