উত্তর:
একটি উদাহরণ দরকারী হতে পারে, কিন্তু আমি আপনাকে সঠিকভাবে বুঝতে পারলে, এটি কাজ করবে:
echo "Hello: world" | cut -f1 -d":"
এটি "হ্যালো: বিশ্ব" কে "হ্যালো" তে রূপান্তর করবে।
basename
এবং cut
নীচে ডেনিসের উত্তর দেখুন
cut
স্টাডিনের কাছ থেকে পড়তে পারে, তাই এটির জন্য বিশেষত যখন আপনার খুব দীর্ঘ স্ট্রিং থাকে যা কোনও ফাইলের বিষয়বস্তুর মতো প্রক্রিয়া করা প্রয়োজন।
hello: world
। এটি অর্ধেক উত্তর।
বাশ (এবং ksh, zsh, ড্যাশ, ইত্যাদি) এ, আপনি প্যারামিটার সম্প্রসারণ ব্যবহার করতে পারেন %
যা স্ট্রিংয়ের শেষ #
থেকে অক্ষরগুলি সরিয়ে দেবে বা স্ট্রিংয়ের শুরু থেকে অক্ষরগুলি সরিয়ে ফেলবে। আপনি যদি এই অক্ষরগুলির মধ্যে একটিরও একটি ব্যবহার করেন তবে ক্ষুদ্রতম মিলে যাওয়া স্ট্রিংটি সরানো হবে। আপনি যদি চরিত্রটি দ্বিগুণ করেন তবে দীর্ঘতম সরিয়ে দেওয়া হবে।
$ a='hello:world'
$ b=${a%:*}
$ echo "$b"
hello
$ a='hello:world:of:tomorrow'
$ echo "${a%:*}"
hello:world:of
$ echo "${a%%:*}"
hello
$ echo "${a#*:}"
world:of:tomorrow
$ echo "${a##*:}"
tomorrow
hello:world
হবে hello:wo
ব্যবহার করে ${a%:*}
?
"${a##*:}"
কেবলমাত্র tomorrow
=) পাওয়ার জন্য যুক্ত করে ভাল
a='hello:world:of:tomorrow'; pattern=''^([^:]*:).*$'
; [[$ a = ~ $ প্যাটার্ন]]; প্রতিধ্বনি "$ {BASH_REMATCH [1]}" `` কোলন থাকলেই তা মেলে। আপনি যদি এটি alচ্ছিক হতে চান তবে একটি আলাদা প্যাটার্ন ব্যবহার করতে হবে। বাশ রেজেক্সেসের একটি ব্যাখ্যা (এবং সাধারণভাবে regexes) এই মন্তব্যগুলির আওতার বাইরে। আপনি অন্যান্য প্রশ্নগুলি খুঁজে পেতে পারেন যা এটি আলোচনা করে বা আপনার নিজের পোস্ট করে।
egrep -o '^[^:]*:'
egrep
সঙ্গে গ্রেপ হয় -E
। নিয়মিত থেকে এখানে কোনও পার্থক্য নেই grep
। -o
গ্রেপকে নির্দেশের সাথে মেলে এমন লাইনের কেবলমাত্র অংশ মুদ্রণ করতে নির্দেশ দেয়। ^
একটি লাইন শুরু ম্যাচ অ্যাঙ্কারস। [^:]*
শূন্য বা আরও বেশি অক্ষরের সাথে মেলে যা :
চরিত্র নয়। :
চরিত্রের সাথে মেলে :
।
ধরা যাক এই ফর্ম্যাটটিতে আপনার ফাইল রয়েছে have
/dirA/dirB/dirC/filename.file
এখন আপনি কেবল সেই পথটি চান যাতে "/" চারটি অন্তর্ভুক্ত রয়েছে। আদর্শ
$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-4 -d"/"
এবং আপনার আউটপুট হবে
/dirA/dirB/dirC
কাটা ব্যবহারের সুবিধা হ'ল আপনি বড় ডিরেক্টরি পাশাপাশি ফাইলটিও কেটে ফেলতে পারেন (উদাহরণস্বরূপ), সুতরাং আপনি যদি টাইপ করেন
$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-3 -d"/"
আপনার আউটপুট হবে
/dirA/dirB
যদিও আপনি স্ট্রিং এর অন্য দিক থেকে একই কাজ করতে পারেন তবে টাইপিংয়ের ক্ষেত্রে এটি এতটা বোঝায় না
$ echo "/dirA/dirB/dirC/filename.file" | cut -f2-4 -d"/"
ফলাফল স্বরূপ
dirA/dirB/dirC
কিছু অন্যান্য ক্ষেত্রে শেষ কেসটিও সহায়ক হতে পারে। মনে রাখবেন যে শেষ আউটপুটটির শুরুতে কোনও "/" নেই।
":" এর শেষ উদাহরণের পরে সবকিছু ছাঁটাই
cat fileListingPathsAndFiles.txt | grep -o '^.*:'
এবং আপনি যদি শেষটি ফেলে দিতে চান ":"
cat file.txt | grep -o '^.*:' | sed 's/:$//'
@ kp123: আপনি প্রতিস্থাপন করতে চান চাই :
সঙ্গে /
(যেখানে sed কোলন হওয়া উচিত \/
)
cut
কাজ করে তবে আমি ডেনিসের উত্তর আরও ভাল এবং আরও নমনীয়। এটির মতো নতুন প্রক্রিয়াটি তৈরি হয়েছে কিনা তা কি কেউ জানেনcut
?