`গ্রেপ ফাইল * Why কেন ব্যর্থ হয়?


9

আমি echo file|grep fil*ব্যর্থতা পেয়েছি , কিন্তু echo abcd|grep abc*সফল।

আমি এটা বুঝতে পারি না, কেউ ব্যাখ্যা করতে পারেন?


আপনি সিস্টেম এবং গ্রেপ এর সংস্করণ যোগ করতে পারেন? এটি gnugrep 2.16 (উবুন্টু 14.04 LTS এর অধীনে) সহ, এটি কোনও ত্রুটি তৈরি করে না (প্রস্থান কোড 0) এবং এটি প্রথম তিনটি বর্ণের সাথে মেলে। উদাহরণস্বরূপ, ই echo file|grep fil*সহ উত্তরগুলি fil
হাস্তুর

3
@ হাস্তুর সমস্যা নিয়মিত প্রকাশের আগে ফাইলের নাম বিস্তারের কারণে ঘটে। আমার ওয়ার্কিং ডিরেক্টরিতে ফাইল দ্বারা উপসর্গ করা একটি ফাইল রয়েছে, তবে অ্যাবসি দ্বারা উপসর্গ করা কোনও ফাইল নয়, সুতরাং ফাইল * ফাইলের নাম দ্বারা প্রতিস্থাপন করা হয়েছে, তবে অ্যাবসি * অপরিবর্তিত রয়েছে।
tmpbin

ধন্যবাদ আমি এটি সম্পর্কে ভাবি নি। আমি যখন আমার প্রচেষ্টা করি তখন আমি তাদের একটি নতুন ডিরেক্টরিতে চেষ্টা করি ...
হস্তুর

উত্তর:


31

আপনার উদাহরণের সাথে দুটি সমস্যা আছে।

প্রাথমিক আপনি অভিমানী করছি যে যে রেগুলার এক্সপ্রেশনের হিসাবে একই কাজ উল্লিখিত glob নিদর্শন যে *একটি ওয়াইল্ড কার্ড অর্থ হল "অক্ষরের কোনো ক্রম।" নিয়মিত প্রকাশে, *এর পরিবর্তে "পূর্ববর্তী পরমাণুর যে কোনও সংখ্যক" এর fil*অর্থ, fতারপরে iশূন্য বা তার বেশি lঅক্ষর দ্বারা অনুসরণ করা । grep fil.*উদ্দেশ্যে হওয়া অর্থটি পেতে আপনাকে বলতে হবে: এর .অর্থ "কোনও একক অক্ষর, যার .*অর্থ" অক্ষরের কোনও ক্রম। "

কম সমস্যাটি হ'ল আপনি অব্যক্ত বিশেষ অক্ষরগুলি ব্যবহার করছেন যার অর্থ গ্লোব বিধিগুলির অধীনে কিছু, যার অর্থ শেলটি তাদের ব্যাখ্যা করতে পারে। আপনি উল্লিখিত glob নিদর্শন মিলে স্থানীয় ডিরেক্টরির মধ্যে কোনো ফাইল ছিল fil*বা abc*, শেল তাদের প্রসারিত হবে , তাই grepপ্রসারিত ফাইলের নাম একটি প্যাটার্ন, না দেয়ার উদ্দেশ্যে পুনরায়- যেমন পেতে হবে। যখনই আপনি কমান্ড লাইন এই ধরনের অক্ষর ব্যবহার করে, আপনি তাদের মূল্যউদ্ধৃতি উচিত: echo file | grep 'fil.*'

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