আমি এই কথাটি বলতে শুরু করব যে আমি মনে করি এই সমস্যাটি যতটা কম মনে হচ্ছে তার চেয়ে খানিকটা নিরীহ।
আমাকে যা করতে হবে: PATH এনভায়রনমেন্ট ভেরিয়েবলের মধ্যে একটি ফোল্ডার পরীক্ষা করুন। এটি শুরুতে বা অন্য কোথাও হতে পারে। আমাকে কেবল যাচাই করতে হবে যে সেই ফোল্ডারটি রয়েছে।
আমার সমস্যার উদাহরণ - আসুন ব্যবহার করি /opt/gnome
।
স্কেনারিও 1: ফোল্ডারটি প্যাথের শুরুতে নয়
# echo "$PATH"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
# echo "$PATH" | grep ":/opt/gnome"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
নোট করুন যে গ্রেপটি যথেষ্ট নির্দিষ্ট হওয়া দরকার যাতে এটি ধরা না পড়ে /var/opt/gnome
। সুতরাং কোলন।
স্কেনারিও 2: ফোল্ডারটি প্যাথের শুরুতে।
# echo "$PATH"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
# echo "$PATH" | grep "^/opt/gnome"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
এটি আমার সমস্যা - আমার এই ফোল্ডারটি দিয়ে কোনও কোলন বা একটি শুরুর লাইন অনুসন্ধান করতে হবে। আমি যা করতে চাই তা হল এই দুটি বন্ধনী এক্সপ্রেশনগুলির মধ্যে একটি:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
কিন্তু [^
ও [:
তাদের নিজস্ব অর্থ আছে। সুতরাং উপরের দুটি কমান্ড কাজ করে না not
একটি কমান্ডে এই দুটি পরিস্থিতিতে আমি গ্রেপ করতে পারি এমন কোন উপায় আছে কি?
grep '^\(any number of other matches:*:\)*my match\(:.*\)*$'
/opt/gnome:
বা তাই/opt/gnome$
, আপনি খুঁজে পাবেন/opt/gnome-foo
বা পাবেন/opt/gnome/bar
।