উত্তর:
এটা চেষ্টা কর:
awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}{print}' INFILE > OUTFILE
প্রথম রেকর্ডে (লাইন), বিওএম অক্ষরগুলি সরান। প্রতিটি রেকর্ড মুদ্রণ করুন।
বা কিছুটা সংক্ষিপ্ততর, এই জ্ঞানটি ব্যবহার করে যে সন্ত্রস্তে ডিফল্ট ক্রিয়াটি রেকর্ডটি মুদ্রণ করা হয়:
awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1' INFILE > OUTFILE
1
হ'ল সংক্ষিপ্ত শর্ত যা সর্বদা সত্যকে মূল্যায়ন করে, তাই প্রতিটি রেকর্ড মুদ্রিত হয়।
উপভোগ করুন!
- যোগ করুন -
ইউনিকোড বাইট অর্ডার মার্ক (বিওএম) এফএকিউতে প্রতিটি এনকোডিংয়ের জন্য সঠিক বিওএম বাইট তালিকাভুক্ত নীচে সারণি অন্তর্ভুক্ত রয়েছে:
Bytes | Encoding Form
--------------------------------------
00 00 FE FF | UTF-32, big-endian
FF FE 00 00 | UTF-32, little-endian
FE FF | UTF-16, big-endian
FF FE | UTF-16, little-endian
EF BB BF | UTF-8
সুতরাং, উপরের টেবিল থেকে \xef\xbb\xbf
আপনি দেখতে পারেন কীভাবে EF BB BF
UTF-8
বিওএম বাইটস।
awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' INFILE > OUTFILE
এবং নিশ্চিত করুন যে ইনফিল এবং আউটফাইল আলাদা!
perl -i.orig -pe 's/^\x{FFFE}//' badfile
আপনার PERL_UNICODE এবং / অথবা PERLIO এনভোডিংয়ের জন্য envariables উপর নির্ভর করতে পারেন। PERL_UNICODE = SD ইউটিএফ -8 এর জন্য কাজ করবে; অন্যদের জন্য আপনার দরকার পার্লিও।
awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1'
জিএনইউ sed
(লিনাক্স বা সাইগউইনে) ব্যবহার করে:
# Removing BOM from all text files in current directory:
sed -i '1 s/^\xef\xbb\xbf//' *.txt
ফ্রিবিএসডি তে:
sed -i .bak '1 s/^\xef\xbb\xbf//' *.txt
জিএনইউ বা ফ্রিবিএসডি ব্যবহারের সুবিধা sed
: -i
প্যারামিটারটির অর্থ "স্থানে", এবং পুনর্নির্দেশগুলি বা অদ্ভুত কৌশলগুলির প্রয়োজন ছাড়াই ফাইলগুলি আপডেট করবে।
ম্যাকে:
awk
অন্য উত্তরের এই সমাধানটি কাজ করে , তবে sed
উপরের কমান্ডটি কাজ করে না। কমপক্ষে ম্যাক (সিয়েরা) sed
ডকুমেন্টেশনে হেক্সাডেসিমাল পালানোর আলাকে সমর্থন করার কথা উল্লেখ করা হয়নি \xef
।
মুর্টিলsponge
থেকে সরঞ্জামটিতে পাইপ দিয়ে যে কোনও প্রোগ্রামের সাথে একই ধরণের কৌশলটি অর্জন করা যেতে পারে :
awk '…' INFILE | sponge INFILE
10.11.6
, এটি কাজ করে না, তবে অফিসিয়াল উত্তর stackoverflow.com/a/1068700/9636 ভাল কাজ করে।
বিশ্রী নয়, তবে আরও সহজ:
tail -c +4 UTF8 > UTF8.nobom
বিওএম পরীক্ষা করার জন্য:
hd -n 3 UTF8
বিওএম উপস্থিত থাকলে আপনি দেখতে পাবেন: 00000000 ef bb bf ...
cat file1.utf8 file2.utf8 file3.utf3 > allfiles.utf8
ভেঙে যাবে। ইউটিএফ -8 এ কোনও বিওএম ব্যবহার করবেন না। সময়কাল।
hd
OS X এর (10.8.2 হিসাবে) উপলব্ধ নয়, তাই একটি জন্য চেক করতে হল UTF-8 BOM সেখানে আপনি নিম্নলিখিত ব্যবহার করতে পারেন: head -c 3 file | od -t x1
।
dos2unix
সিআরএলএফ লাইন প্রান্তটি এলএফ-তে রূপান্তরিত করার পাশাপাশি, বিওএমগুলিও সরিয়ে দেয়:
dos2unix *.txt
dos2unix
এছাড়াও বিওএম ছাড়াই ইউটিএফ -16 ফাইলকে বিওএম ছাড়াই (তবে বিওএম ছাড়াই ইউটিএফ -16 ফাইল নয়) ইউটিএফ -8 এ বিওএম ছাড়ায় রূপান্তরিত করে:
$ printf '\ufeffä\n'|iconv -f utf-8 -t utf-16be>bom-utf16be
$ printf '\ufeffä\n'|iconv -f utf-8 -t utf-16le>bom-utf16le
$ printf '\ufeffä\n'>bom-utf8
$ printf 'ä\n'|iconv -f utf-8 -t utf-16be>utf16be
$ printf 'ä\n'|iconv -f utf-8 -t utf-16le>utf16le
$ printf 'ä\n'>utf8
$ for f in *;do printf '%11s %s\n' $f $(xxd -p $f);done
bom-utf16be feff00e4000a
bom-utf16le fffee4000a00
bom-utf8 efbbbfc3a40a
utf16be 00e4000a
utf16le e4000a00
utf8 c3a40a
$ dos2unix -q *
$ for f in *;do printf '%11s %s\n' $f $(xxd -p $f);done
bom-utf16be c3a40a
bom-utf16le c3a40a
bom-utf8 c3a40a
utf16be 00e4000a
utf16le e4000a00
utf8 c3a40a
আমি জানি প্রশ্নটি ইউনিক্স / লিনাক্সে পরিচালিত হয়েছিল, ভেবেছিলেন ইউনিক্স-চ্যালেঞ্জের জন্য (উইন্ডোতে, একটি ইউআই সহ) একটি ভাল বিকল্প উল্লেখ করা ভাল।
আমি একটি ওয়ার্ডপ্রেস প্রকল্পে একই সমস্যার দিকে দৌড়েছি (বিওএম আরএসএস ফিড এবং পৃষ্ঠা বৈধকরণে সমস্যা সৃষ্টি করছিল) এবং বিওএমের সাথে থাকা একটিটিকে খুঁজে পেতে আমাকে বেশ বড় ডিরেক্টরি ডিরেক্টরিতে সমস্ত ফাইল সন্ধান করতে হয়েছিল। রিপ্লেস পাইওনিয়ার নামে একটি অ্যাপ্লিকেশন পেয়েছে এবং এতে:
ব্যাচ রানার -> অনুসন্ধান (সাবফোল্ডারগুলিতে সমস্ত ফাইল সন্ধানের জন্য) -> টেমপ্লেট প্রতিস্থাপন করুন -> বাইনারি সরান বিওএম (এটির জন্য প্রস্তুত অনুসন্ধান এবং প্রতিস্থাপন টেমপ্লেট রয়েছে)।
এটি সবচেয়ে মার্জিত সমাধান ছিল না এবং এটির জন্য একটি প্রোগ্রাম ইনস্টল করা দরকার যা একটি নেতিবাচক দিক। তবে একবার আমার চারপাশে কী চলছে তা আমি জানতে পারি এটি একটি কবজির মতো কাজ করেছে (এবং বিওএমের সাথে থাকা প্রায় 2300 এর মধ্যে 3 টি ফাইল খুঁজে পেয়েছিল)।