উত্তর:
কেবল সেই বাক্য গঠনটি ব্যবহার করুন:
sed 's/馑//g' file1
বা পালানো আকারে:
sed "s/$(echo -ne '\u9991')//g" file1
(নোট করুন যে বাশের পুরানো সংস্করণ এবং কিছু শেল বুঝতে পারে না echo -e '\u9991'
, তাই প্রথমে পরীক্ষা করে দেখুন))
sed
জি সংশোধক রয়েছে এটি যখন একে অপরকে অনুসরণ করে তখন সমস্ত ঘটনাকেও প্রতিস্থাপন করে। এছাড়াও সেডটিকে এটি একটি চরিত্র হিসাবে গণনা করা উচিত, দেখুন: echo -ne "馑" | wc -m
দেয় 1
। আপনি যদি বাইটগুলি ( wc -c
) গণনা করেন তবে এটি ফিরে আসবে 3
। আমি কি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পেরেছি?
.
"একটি চরিত্র" বা "একটি বাইট" মানে?
echo 馑 | sed s/...//
আমাকে দেয় 馑
(কিছুই প্রতিস্থাপন করা হয় না)
en_US.UTF-8
করে তবে এর অধীন হয় না C
।
পার্ল এটি করতে পারে:
echo 汉典“馑”字的基本解释 | perl -CS -pe 's/\N{U+9991}/Jin/g'
-CS
স্ট্যান্ডার্ড ইনপুট, আউটপুট এবং ত্রুটির জন্য ইউটিএফ -8 চালু করে।
sed
সমর্থন ইউনিকোড সংস্করণ একটি সংখ্যা :
আমি বিএসডি সেডের তথ্য খুঁজে পাইনি, যা আমি মনে করি অদ্ভুত, তবে আমার মনে হয় প্রতিক্রিয়াগুলি ভাল যে এটি ইউনিকোডকেও সমর্থন করে। দুর্ভাগ্যক্রমে, কোন sed
এনকোডিংটি ব্যবহার করবেন তা জানার কোনও মানক উপায় নেই , সুতরাং প্রত্যেকে নিজের নিজের পদ্ধতিতে এটি করে।
এটি আমার পক্ষে কাজ করে:
$ vim -nEs +'%s/\%u9991//g' +wq file1
এটি আমার পছন্দের তুলনায় আরও একটি ড্রপ; এখানে একটি সম্পূর্ণ ব্যাখ্যা:
-n
ভিএম সোয়াপ ফাইলটি অক্ষম করুন-E
প্রাক্তন উন্নত মোড-s
নিঃশব্দ অবস্থা+'%s/\%u9991//g'
সাবস্টিটিউশন কমান্ড কার্যকর করুন+wq
সংরক্ষণ করুন এবং প্রস্থানfile1
করে , এটা কি সঠিক?
BASH এর সাম্প্রতিক সংস্করণগুলির সাথে, কেবল ছদ্মবেশী এক্সপ্রেশনটির চারপাশের উদ্ধৃতিগুলি বাদ দিন এবং আপনি BASH এর পালানো স্ট্রিং ব্যবহার করতে পারেন। সেড এক্সপ্রেশন বা সেড এক্সপ্রেশনের অংশগুলির মধ্যে ফাঁকা স্থানগুলি যা বিএএসএএসএইচ দ্বারা ওয়াইল্ডকার্ড হিসাবে ব্যাখ্যা করা যেতে পারে individ
$ echo "饥馑荐臻" | sed s/$'\u9991'//g
饥荐臻
echo 馑 | sed s/...//
মুদ্রণ আছে?