“Ls -a | এর অদ্ভুত আচরণ গ্রেপ ^ \। "


10

আমি একটি পিডব্লিউডির সামগ্রী তালিকাবদ্ধ করতে এবং বিন্দু দিয়ে শুরু হওয়া কেবলমাত্র ফাইল প্রদর্শন করতে চেয়েছিলাম। আমি চেষ্টা করেছি ls -a | grep ^\.কিন্তু আউটপুটে কেন ডট দিয়ে শুরু হয় না এমন ফাইলগুলি রয়েছে তা আমি বুঝতে পারি না। উদাহরণ স্বরূপ:

Pictures
.pip
.pki
.profile
projects
Public

আমি জানি যে আমি যা চাই তা অর্জন করতে পারি ls -ld .*আমি গ্রেপের এই আচরণ সম্পর্কে উত্সাহী যা আমি ব্যাখ্যা করতে পারি না।



কেন কেবল ls -d .*সমস্ত ফাইল দিয়ে শুরু করে তালিকাভুক্ত করা হবে না .?
বার্মার

একটি সতর্কতামূলক নোট: ls এর আউটপুটটিকে অন্য কমান্ডে কখনও পাইপ করবেন না। পরিবর্তে অনুসন্ধান ব্যবহার করুন। ls এর অনেক বেশি আদর্শিক সংস্থাগুলি বিশ্বাসযোগ্য has দেখুন: পিটফল 1 এ mywiki.wooledge.org/BashPitfalls - এটি # 1 করেছে! সাইটটির বাকি অংশটিও দুর্দান্ত।
জো

উত্তর:


20

grepএইভাবে যুক্তিটি উদ্ধৃত করুনls -a | grep '^\.'

এর কারণ হ'ল শেলটি হ্যান্ডেল \.করে এটিকে আবার সমতলে পরিণত করে ., যা grepপরে একক অক্ষরের ওয়াইল্ডকার্ড হিসাবে বিবেচনা করে। যদি সন্দেহ হয় তবে সর্বদা একটি স্ট্রিংটি উদ্ধৃত করুন যাতে শেলটির জন্য একটি বিশেষ অক্ষর রয়েছে (বা থাকতে পারে)।


শেল কেন উপেক্ষা করে?
পিএস-অক্স

হ'ল একটি পালানোর ক্রম যা শেলটিকে নিম্নলিখিত অক্ষরটিকে আক্ষরিক হিসাবে বিবেচনা করে। এতে grep ^\\., শেল দ্বারা একক ব্যাকস্ল্যাশ হিসাবে গণ্য করা হয় এবং আবার গ্রেপ একক ব্যাকস্ল্যাশকে ডটকে আক্ষরিক বিন্দু হিসাবে গণ্য করে।
অবিনাশ রাজ

11

আপনার উদ্ধৃতিগুলির মধ্যে গ্রেপ রেজেক্স লাগাতে হবে।

ls -a | grep '^\.'

দ্রষ্টব্য: কমান্ডের আউটপুট বিশ্লেষণ করবেন নাls


এলএসের আউটপুটকে পার্স করা খারাপ কেন?
পিএস-অক্স

লিঙ্কটি থেকে: এর ডিফল্ট মোডে, যদি স্ট্যান্ডার্ড আউটপুটটি টার্মিনাল না হয়, ls নতুন লাইনের সাথে ফাইলের নামগুলি পৃথক করে। আপনার কাছে নতুন নামে একটি ফাইল না হওয়া পর্যন্ত এটি ঠিক আছে।
মাইকেল ডুরান্ট

@ মিশেল ডুরান্ট: আমি প্রস্তাব দিচ্ছি যে ফাইলনামগুলিতে নতুন লাইনের অনুমতি দেওয়া একটি প্রধান সিস্টেম বাগ।
জামেস্কফ

@ জামেস্কেফ - ফাইলের নামগুলিতে নিউলাইনগুলি দেখুন (বিশেষত এসএমএল এর উত্তর)।
don_crissti

0

যদি আপনি cmd ls -a নির্বাহ করেন গ্রেপ ^ \। তাহলে গ্রেপ "\" কে একটি বিশেষ চরিত্র এবং "এর অর্থ হিসাবে বিবেচনা করবেন না।" পালাতে হবে না।

যখন আমরা cmd ls -a | গ্রেপ "^ \।" তারপরে গ্রেপ "\" কে একটি বিশেষ চরিত্র এবং "এর অর্থ হিসাবে বিবেচনা করে।" পালিয়ে যায় এটি প্রত্যাশার মতো আপনাকে ফলাফল দেবে।

আপনি যদি উদ্ধৃতি ছাড়াই গ্রেপ সেন্টিমিডি ব্যবহার করতে চান তবে আপনার "\" অক্ষরটি থেকেও পালানো উচিত। কমান্ড অনুসরণ করে ডাবল উদ্ধৃতি ছাড়াই আপনি প্রত্যাশিত ফলাফল পেতে পারেন। ls -a | গ্রেপ ^ \\।

রেজেক্সে বিশেষ অক্ষরের অর্থ সম্পর্কে বিশদ জানতে নীচের লিঙ্কটি দেখুন। http://www.regular-expressions.info/quickstart.html

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