কোনও শব্দে শেষ অক্ষর মুছুন তবে কেবল অক্ষরটি থাকলে - ব্যাশে


13

কেবলমাত্র সেখানে থাকলে শেষ চরিত্রটি কীভাবে সরিয়ে ফেলা যায়?

ইনপুট:

OpenOffice.org/m
openOffice.org/ozm
Pers।
Pfg।
ফিলি।
প্রফেসর
রেস্প।
Roonstr./m
roonstr./ozm

কাঙ্ক্ষিত আউটপুট:

OpenOffice.org
openOffice.org
Pers
Pfg
ফিল
অধ্যাপক
রেস্প
Roonstr
roonstr

আমি এ পর্যন্ত পেয়েছি যে কেবল বিন্দুটি বাকি আছে তবে দুর্ভাগ্যক্রমে শেষ সেড কমান্ডটি চিঠিটিও সরিয়ে ফেলে g: $ cat filename | grep "\." | cut -d"/" -f1 | sed 's/.$//'

উত্তর:


13

আপনার sedকমান্ডের ডট থেকে আপনাকে পালাতে হবে এবং সবকিছু ঠিক আছে। এটার মত:

sed 's/\.$//'

কারণ আপনি যদি এড়াতে না যান তবে .$স্ট্রিংয়ের শেষে কোনও অক্ষরের সাথে মিলবে।

এছাড়াও আপনি সব আপনার লাগাতে পারেন sed+ + grep+ + cutমধ্যে মাত্র এক sed:

sed 's=/[^/]*$==;s/\.$//' filename

দুর্দান্ত, ধন্যবাদ, কাজ! :) আমি 300k এর বেশি লাইন সহ একটি অভিধান ব্যবহার করি তাই এই কারণেই আমি গ্রেপ "\" ব্যবহার করি \ সেখানে একটি বিন্দু দিয়ে কেবল শব্দগুলি পেতে।

এছাড়াও sed ভালো পরিধান সঙ্গে এটি করতে পারেন: sed -n '/\./{s=/[^/]*$==;s/\.$//;p}। যাইহোক grep+ sedকেবল একটির চেয়ে অনেক বেশি সময় ধরে কাজ করবে sed
নলখাগড়া

যদি এটি একটি সেড দিয়ে করা যায় তবে এটি দুর্দান্ত হবে। আপনার শেষ সেড কমান্ড কিভাবে প্রয়োগ করবেন?

sed 's/[./]\+[^./]*$//'
পিটার.ও

ধন্যবাদ এখন আমার কাটা দরকার নেই, তবে গ্রেপ এখনও আছে। আমার পাইপযুক্ত গ্রেপ কমান্ডের একটি সমপরিমাণ তারপরে গ্রেপটিকে মুছে ফেলবে, যদি এটি সম্ভব হয় তবে এটি দুর্দান্ত। "এছাড়াও আপনি আপনার সমস্ত সেড + গ্রেপ + কেবল একটি পাতায় কেটে রাখতে পারেন" আমার পক্ষে কাজ করে না, সমস্ত শব্দ মুদ্রণ করে?

1

কোনও অক্ষর কেবল তখনই সরিয়ে ফেলা হচ্ছে প্যারামিটারের বিস্তারের ঠিক বর্ণনা আছে

 $ var=path.
 $ echo "$var    ${var%.}"
 path.    path

এই ক্ষেত্রে বিন্দুটি বিশেষ নয় (কোনও বিন্দু একটি রেজেক্সে বিশেষ)।

অন্য প্যাটার্নটি এর সাথে সরানো যেতে পারে %/*:

 $ var=openOffice.org/ozm
 $ echo "${var%/*}"
 openOffice.org

উভয় অপসারণ:

 $ var=roonstr./ozm
 $ var=${var%/*}
 $ var=${var%.}
 $ echo "$var"
 roonstr

অবশ্যই, একটি উত্স ফাইলের সাথে কাজ করার জন্য ফাইলটিতে সেড ব্যবহার করা আরও দ্রুত।
কেবল বিন্দুর উদ্ধৃতি মনে রাখবেন (এটির সাথে আক্ষরিক মিলের জন্য, অন্যথায় এটির অর্থ: কোনও চরিত্র)।

 $ sed 's,/.*,,;s,\.$,,' file

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। আরও upvotes প্রয়োজন।
ডেভিড পার্কস

0

আপনার নিয়মিত অভিব্যক্তিটি কিছুটা পরিবর্তন করুন: পালাতে . এবং আপনার প্রয়োজন হয় নাgrep

cat filename | cut -d"/" -f1 | sed 's/\.$//'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.