আমি কীভাবে ইউ + 200 বি (জিরো-প্রস্থের স্থান) মুছে ফেলতে পারি সেড ব্যবহার করে


15

আমার একটি খুব বড় ফাইল রয়েছে যার শূন্য প্রস্থের স্পেস ছড়িয়ে আছে। এটি খুলতে এবং এটি ব্যবহার করতে সম্পাদনা করতে খুব বেশি সময় নেয় viতাই আমি ব্যবহার করে চরিত্রের সমস্ত উদাহরণ মুছতে চাই sed। সমস্যাটি হচ্ছে, চরিত্রটি কীভাবে মেলা যায় তা আমি বুঝতে পারি না! আমি ব্যবহার চেষ্টা করেছি \u200B, \x{200b}। কোন ধারনা?

আমি CentOS 5 চালিয়ে যাচ্ছি যদি এটি কিছুটা সহায়তা করে।


আপনার শেডের অনুলিপিটি কি ইউনিকোড এনকোডিংটিকে সমর্থন করে যে ফাইলটি এনকোড করা আছে? যদি না হয় তবে
সেডের

@ জ্যানসি - প্রকৃতপক্ষে আমি পাইথনের সাথে গেছি। ফাইলটি ইউটিএফ 8 দিয়ে এনকোড করা হয়েছে, যথেষ্ট মানক বলে মনে হচ্ছে যে কোনও কিছু এটি প্রক্রিয়া করতে সক্ষম হবে should আমি আমার পাইথন স্ক্রিপ্টটি নীচে যুক্ত করেছি, এটি কারওর জন্য কার্যকর।
thetaiko

উত্তর:


11

এটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে:

sed 's/\xe2\x80\x8b//g' inputfile

প্রদর্শন:

$ /usr/bin/printf 'X\u200bY\u200bZ' | hexdump -C
00000000  58 e2 80 8b 59 e2 80 8b  5a                       |X...Y...Z|
$ /usr/bin/printf 'X\u200bY\u200bZ' | sed 's/\xe2\x80\x8b//g' | hexdump -C
00000000  58 59 5a                                          |XYZ|

সম্পাদনা:

গিলসের উত্তরের ভিত্তিতে:

tr -d $(/usr/bin/printf "\u200b") < inputfile

নিখুঁত - আমি ঠিক এটিই খুঁজছিলাম। আসলে, আমি \xe2\x80\x8bপাইথনে কিছু নমুনা স্ট্রিংয়ের দিকে তাকানোর সময় অক্ষরগুলির একই সেটটি লক্ষ্য করেছি ( )। ধন্যবাদ!
thetaiko

4

ইউটিএফ -8 এর সাথে জিএনইউ সিডের আচরণ খুব সু-সংজ্ঞায়িত বলে মনে হচ্ছে না। পরীক্ষামূলকভাবে, আপনি এটি ইউটিএফ -8 উপস্থাপনের বাইটগুলি প্রতিস্থাপন করতে পারেন:

<old sed 's/\xe2\x80\e8b//g' >new

বিকল্পভাবে, আপনি নিজের শেলটিতে অক্ষরটি টাইপ করতে পারেন এবং কোনও ইউটিএফ -8 লোকালে মানক আদেশগুলি ব্যবহার করতে পারেন:

<old tr -d '​' >new
<old sed 's/​//g' >new

Zsh এ, আপনি একটি পালানোর ক্রমের মাধ্যমে অক্ষরটি প্রবেশ করতে পারেন:

<old tr -d $'\u200B' >new

ব্যাশ 4.2 পর্যন্ত ইউনিকোড ক্রম দ্বারা সমর্থিত echo -e, printfবিন্যাস স্ট্রিং এবং ANSI উদ্ধৃতিচিহ্ন সহ পংক্তি (যেমন echo -e '\u1E4F', printf '\u01DD %s\n' 'X', mkdir $'\u0250)
বিরাম দেওয়া পরবর্তী ঘোষণা না হওয়া পর্যন্ত।

0

ঠিক আছে, যদি না কারও কাছে এটি করার কীভাবে কোনও ধারণা sedনা থাকে (তবে আমি এখনও আগ্রহী, এর মাধ্যমে) পাইথনটি উদ্ধার করার জন্য ...

import sys, re
pattern = re.compile(u"\u200b")
f = open(sys.stdin, "rb")
for line in f:
    a = pattern.sub("", line.decode("utf8"))
    print a.encode("utf8"),
f.close()

2
আপনি যদি বড় বন্দুকগুলির কাছে পৌঁছতে চলেছেন তবে কত সহজ perl -C -pe 's/\x{200B}//g'?
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

গিলস +1 এ যা ম্যাক ওএসএক্স-এও কাজ করে। perl -C -pi.bak -e 's/\x{200B}//g' yourfileআপনার
ফাইলটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.