আপনি কী করবেন তার উপর নির্ভর করে এবং pip
আউটপুট কী হবে সে সম্পর্কে আগেই জানেন না , আপনি grep
অন্য কোনও কিছুর জন্য সিদ্ধান্ত নিতে পারেন /usr.*
।
আপনি কি জানেন সঙ্গে ডিরেক্টরির শুরু/usr
(এবং এটি থেকে আউটপুট লাইনের শেষে প্রদর্শিত হবে pip
, এবং যে /usr
ডিরেক্টরি নাম আগে লাইন কোথাও প্রদর্শিত হবে না), তারপর যে একটি সূক্ষ্ম পছন্দ; হিমাইলের উত্তর আপনাকে জানায় কীভাবে।
আপনি যে কারণে এটি শুরু করে তা জানার কারণটি/usr
হ'ল আপনি কেবল কমান্ডটি চালিয়েছেন এবং আপনি যে ডিরেক্টরিটি পরিবর্তন করতে চান তা জানেন, আমি কমান্ডটি চালানোর সহজ সমাধানের পরামর্শ দিই cd /usr/lib64/python2.7/site-packages
। আপনি ট্যাব সমাপ্তি ব্যবহার না করলেও এটি টাইপিং কম ।
অন্যথায়, আপনি আউটপুট পার্স হওয়ার বিষয়ে কী জানেন তার উপর নির্ভর করে আপনি একটি আলাদা রেজিপেক্স চয়ন করতে পারেন। নীচের সমস্ত বিকল্প এখনও অনুমান করে যে ডিরেক্টরি নামটি লাইনের শেষে প্রদর্শিত হবে, তবে অন্যান্য অনুমানগুলি পৃথক হয়।
আপনি কি জানেন ডিরেক্টরির নাম পরম (অর্থাত, একটি দিয়ে শুরু হয় /
) এবং কোন /
ডিরেক্টরি নাম আগে লাইনে প্রদর্শিত হয় , আপনি হিসাবে একই regexp ব্যবহার করতে পারেন heemayl এর উত্তর কিন্তু /
পরিবর্তে /usr
:
cd "$(pip install django | grep -o '/.*')"
এটি কোনও বর্ণ ( ) এর /
শূন্য বা তার বেশি ( *
) এর সাথে মিলে যায় .
।
আপনি যদি জানেন যে ডিরেক্টরি নামের কোনও অনুভূমিক সাদা স্থান নেই (ফাঁকা জায়গা বা ট্যাব নেই) এবং লাইনটির শেষে প্রদর্শিত হয় , আপনি ব্যবহার করতে পারেন:
cd "$(pip install django | grep -oP '[^\h]+$')"
এখানে আমি একটি পার্ল রিজেক্সপ ( -P
) ব্যবহার করেছি কারণ \h
সংক্ষিপ্তকরণ (এর জন্য [:blank:]
) টাইপ করা এবং সমান বর্ধিত রিজেক্সএক্স ( -E
) এর চেয়ে পড়া সহজ করে তোলে । এই এক বা একাধিক (ম্যাচ +
) অক্ষরের একটি শ্রেণী (যে কোন চরিত্রের [
]
) যে না ( ^
) একটি স্থান বা ট্যাব ( \h
)।
যদি আপনি জানেন তবে তার ডিরেক্টরি নামের সাথে সাথে তার আগেই in
অনুভূমিক সাদা স্থান (যেমন, বাম এবং ডানদিকে ফাঁকা দিয়ে আবদ্ধ) দ্বারা ঘিরে রয়েছে এবং লাইনে কেবল এই ঘটনাটিইin
আপনি ব্যবহার করতে পারেন:
cd "$(pip install django | grep -oP '\hin\h+\K.+')"
এটি শূন্য-প্রস্থের ইতিবাচক চেহারা-পিছনের দৃ (়তা ( \K
) ব্যবহার করে এক বা একাধিক অক্ষরের সাথে মিলিত করতে ( .+
) যা কোনও স্থান বা ট্যাব ( \h
) পরে প্রদর্শিত হবে in
এবং অন্য এক বা একাধিক স্পেস বা ট্যাব ( \h+
) প্রকৃতপক্ষে in
এবং ফাঁকা ফাঁকা স্থান ব্যতীত ম্যাচে এটি ঘিরে লুক-আশেপাশের দৃ় প্রতিজ্ঞাগুলি পার্ল নিয়মিত এক্সপ্রেশনগুলির একটি বৈশিষ্ট্য।
প্যাটার্নটিও কাজ করতে পারত, তবে আমাদের উপস্থিত থাকা নির্বিশেষে আমাদের কেবল আগে একটি ফাঁকা সন্ধান করতে হবে। বিপরীতে, আমাদের অবশ্যই সমস্ত শূন্যস্থান মেলে ফেলতে হবে , বা সেগুলি ফেলে দেওয়া হবে না এবং সেগুলি ডিরেক্টরি নামের অংশ হিসাবে মিলবে।\h+in\h+\K.+
in
in
\K
আপনি কি জানেন ডিরেক্টরির নাম অবিলম্বে লাইন এর পূর্বে করা হয় গত সংঘটন in
অনুভূমিক হোয়াইটস্পেস দ্বারা অনুসরণ , আপনি ব্যবহার করতে পারেন:
set +H
cd "$(pip install django | grep -oP '\hin\h+(?!.*\hin\h.*)\K.*')"
set -H
সেখানে, শূন্য-প্রস্থের ইতিবাচক চেহারা-পিছনে দৃser়পত্রে নিজেই একটি শূন্য-প্রস্থের নেতিবাচক চেহারা-এগিয়ে জোর দেওয়া ( (?!
)
) রয়েছে।
!
এমনভাবে কঠিন হতে হিসেবে দেখা অব্যাহতি এইরূপ সূচারূভাবে; পাস করার আগে শেল ইতিহাসের সম্প্রসারণকে ট্রিগার করা থেকে রোধ করার জন্য আমি যে পদ্ধতিটি ব্যবহার করেছি তা grep
হ'ল set +H
কমান্ডটি চালানোর আগে অস্থায়ীভাবে ইতিহাসের প্রসারণ ( ) অকার্যকর করা এবং set -H
এরপরে এটি পুনরায় সক্ষম করুন । আপনি যদি এটি কোনও স্ক্রিপ্টে ব্যবহার করে থাকেন এবং আপনার স্ক্রিপ্টটি এতে না রাখে set -H
, ইতিহাসের বিস্তারটি কেবল স্বয়ংক্রিয়ভাবে সক্ষম হয়ে গেলে কেবল শেল ইন্টারেক্টিভভাবে চালিত হয়।
সবশেষে লক্ষ করুন যে এগুলির কোনওটিই বা হিমাইলের উত্তরগুলি আসলে আউটপুটটি পাইপ করছে grep
না cd
(যদিও আউটপুটটি pip
এখনও পাইপ করা হচ্ছে grep
)। পাইপগুলির পরিবর্তে , এই কাজের উপযুক্ত সরঞ্জাম হ'ল কমান্ড প্রতিস্থাপন ।