সেডের কোনও বিকল্প আছে যা ইউনিকোড সমর্থন করে?


33

উদাহরণ স্বরূপ:

sed 's/\u0091//g' file1

এই মুহূর্তে, আমাকে hexdumpহেক্স নম্বর পেতে এবং নীচে প্রবেশ করতে হবে sed:

$ echo -ne '\u9991' | hexdump -C
00000000  e9 a6 91                                          |...|
00000003

এবং তারপর:

$ sed 's/\xe9\xa6\x91//g' file1

উত্তর:


28

কেবল সেই বাক্য গঠনটি ব্যবহার করুন:

sed 's/馑//g' file1

বা পালানো আকারে:

sed "s/$(echo -ne '\u9991')//g" file1

(নোট করুন যে বাশের পুরানো সংস্করণ এবং কিছু শেল বুঝতে পারে না echo -e '\u9991', তাই প্রথমে পরীক্ষা করে দেখুন))


1
সেড কি একটি চরিত্র বা 3 হিসাবে গণনা করে? যে, কিছু echo 馑 | sed s/...//মুদ্রণ আছে?
ব্যবহারকারী 253751

@ মিমিবিস যেহেতু sedজি সংশোধক রয়েছে এটি যখন একে অপরকে অনুসরণ করে তখন সমস্ত ঘটনাকেও প্রতিস্থাপন করে। এছাড়াও সেডটিকে এটি একটি চরিত্র হিসাবে গণনা করা উচিত, দেখুন: echo -ne "馑" | wc -mদেয় 1। আপনি যদি বাইটগুলি ( wc -c) গণনা করেন তবে এটি ফিরে আসবে 3। আমি কি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পেরেছি?
বিশৃঙ্খলা

আমি বলতে চাইছিলাম: ."একটি চরিত্র" বা "একটি বাইট" মানে?
ব্যবহারকারী 253751

@ মিম্বিস আমি একটি চরিত্রের সাথে মেলে তাই echo 馑 | sed s/...//আমাকে দেয় (কিছুই প্রতিস্থাপন করা হয় না)
বিশৃঙ্খলা

4
@ চাওস: এটি এর অধীনে কাজ en_US.UTF-8করে তবে এর অধীন হয় না C
চোরোবা

15

পার্ল এটি করতে পারে:

echo 汉典“馑”字的基本解释 | perl -CS -pe 's/\N{U+9991}/Jin/g'

-CS স্ট্যান্ডার্ড ইনপুট, আউটপুট এবং ত্রুটির জন্য ইউটিএফ -8 চালু করে।


7
পার্ল প্রায় কিছু করতে পারে .....
wobily_col

6

sedসমর্থন ইউনিকোড সংস্করণ একটি সংখ্যা :

আমি বিএসডি সেডের তথ্য খুঁজে পাইনি, যা আমি মনে করি অদ্ভুত, তবে আমার মনে হয় প্রতিক্রিয়াগুলি ভাল যে এটি ইউনিকোডকেও সমর্থন করে। দুর্ভাগ্যক্রমে, কোন sedএনকোডিংটি ব্যবহার করবেন তা জানার কোনও মানক উপায় নেই , সুতরাং প্রত্যেকে নিজের নিজের পদ্ধতিতে এটি করে।


তারা কি বিএম-এর সাথে এবং ছাড়া ইউটিএফ -16 সমর্থন করে?
উপভোগ অমি

10
ইউটিএফ -16 ইউনিক্স-ভিত্তিক ওএসএসে বেশ ব্যবহারযোগ্য। এটি এমন একটি ঘৃণা যা দিনের আলো কখনই দেখা উচিত ছিল না।
ব্রায়ান বিআই

তারা ইউটিএফ -16 সমর্থন করে কিনা তা বাস্তবায়নের উপর নির্ভর করে এবং আমি ভয় করি যে আমার কাছে এই ডেটা নেই। আমি সন্দেহ করি যে প্ল্যান 9 সেডটি করে (মূল ওএসটি ইউটিএফ -8 সর্বত্র হয়) তবে আমি নিশ্চিত হতে পারি না, এবং তা না পারলে অন্যরাও পারে।
স্পুনিস্ট

2

এটি আমার পক্ষে কাজ করে:

$ vim -nEs +'%s/\%u9991//g' +wq file1

এটি আমার পছন্দের তুলনায় আরও একটি ড্রপ; এখানে একটি সম্পূর্ণ ব্যাখ্যা:

  • -n ভিএম সোয়াপ ফাইলটি অক্ষম করুন
  • -E প্রাক্তন উন্নত মোড
  • -s নিঃশব্দ অবস্থা
  • +'%s/\%u9991//g' সাবস্টিটিউশন কমান্ড কার্যকর করুন
  • +wq সংরক্ষণ করুন এবং প্রস্থান

আমি মনে করি এটি স্থান পরিবর্তন file1 করে , এটা কি সঠিক?
জারিত

@gerrit যে সঠিক, এবং এটি নির্দেশ করার জন্য ধন্যবাদ।
আরেহ লাইব বৃষ

1

BASH এর সাম্প্রতিক সংস্করণগুলির সাথে, কেবল ছদ্মবেশী এক্সপ্রেশনটির চারপাশের উদ্ধৃতিগুলি বাদ দিন এবং আপনি BASH এর পালানো স্ট্রিং ব্যবহার করতে পারেন। সেড এক্সপ্রেশন বা সেড এক্সপ্রেশনের অংশগুলির মধ্যে ফাঁকা স্থানগুলি যা বিএএসএএসএইচ দ্বারা ওয়াইল্ডকার্ড হিসাবে ব্যাখ্যা করা যেতে পারে individ

$ echo "饥馑荐臻" | sed s/$'\u9991'//g
饥荐臻

এটি নতুন গ্রহণযোগ্য উত্তর হওয়া উচিত, সহজ এবং পরিষ্কার!
অ্যালেন ওয়াং

0

জিএনইউ সেডের সাথে আমার জন্য কাজ করে (সংস্করণ 4.2.1):

$ echo -ne $'\u9991' | sed 's/\xe9\xa6\x91//g' | hexdump -C
$ echo -ne $'\u9991' | hexdump -C
00000000  e9 a6 91

( sedআপনার জন্য অন্য একটি প্রতিস্থাপনও জিএনইউ ব্যবহার করতে পারে awk; তবে এটি প্রয়োজনীয় বলে মনে হচ্ছে না))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.