বিওএম-এর সাথে ইউটিএফ -8 এনকোডিংয়ে আমার একটি ফাইল আছে এবং আমি বিওএমটি সরাতে চাই। ফাইল থেকে বিওএম সরানোর জন্য কি কোনও লিনাক্স কমান্ড-লাইন সরঞ্জাম রয়েছে?
$ file test.xml
test.xml: XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
বিওএম-এর সাথে ইউটিএফ -8 এনকোডিংয়ে আমার একটি ফাইল আছে এবং আমি বিওএমটি সরাতে চাই। ফাইল থেকে বিওএম সরানোর জন্য কি কোনও লিনাক্স কমান্ড-লাইন সরঞ্জাম রয়েছে?
$ file test.xml
test.xml: XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
উত্তর:
আপনি যদি নিশ্চিত না হন যে ফাইলটিতে কোনও ইউটিএফ -8 বিওএম রয়েছে, তবে এটি (জিএনইউ এর বাস্তবায়ন অনুমান করে sed) বিওএম বিদ্যমান থাকলে তা মুছে ফেলবে, না থাকলে তা পরিবর্তন করবে না।
sed '1s/^\xEF\xBB\xBF//' < orig.txt > new.txt
আপনি -iবিকল্পটি দিয়ে বিদ্যমান ফাইলটি ওভাররাইট করতে পারেন :
sed -i '1s/^\xEF\xBB\xBF//' orig.txt
en_US.UTF-8লোকেলের সাথে এটি পরীক্ষা করেছি এবং এটি কার্যকর হয়েছে worked কখন ব্যর্থ হবে?
-<U+FEFF>\chapter{xxx}পরে: +\chapter{xxx}^M ব্যাখ্যা: ক্ষীর-ফাইলে টাইপসের জন্য এমএস-শব্দ ব্যবহার করা। লিনাক্সের অধীনে লেটেক্স উল্লেখ করা ত্রুটিগুলি দেখায়। আউটপুট একটি গিট সিস্টেম থেকে হয়। এই বিশেষ কেসটি ধরতে আমি কীভাবে ভাবটি পরিবর্তন করতে পারি?
ইউটিএফ -8-তে কোনও বিওএম বোঝায় না। এগুলি সাধারণত মাইক্রোসফ্ট ওএসে বোগাস সফ্টওয়্যার দ্বারা ভুলভাবে যুক্ত হয়।
dos2unix এটি মুছে ফেলা হবে এবং উইন্ডোজ পাঠ্য ফাইলগুলির অন্যান্য আইডিয়াসক্র্রেসিগুলির যত্নও নেবে।
dos2unix test.xml
dos2unix?
tailকমান্ডটি দিয়ে কোনও ফাইল থেকে বিওএম সরিয়ে ফেলা সম্ভব :
tail -c +4 withBOM.txt > withoutBOM.txt
tail1 ভিত্তিক সূচক ব্যবহার করছে ?! ডব্লিউটিএফ!
tail -c -1বা tail -c 1(যা tailসাধারণত ব্যবহৃত হয়) হ'ল tail -c +1প্রথম বাইট দিয়ে শুরু করা শেষ বাইট দিয়ে শুরু করা সামগ্রী । tail -c 0/ tail -c +0এটির জন্য আরও অনেক অনিচ্ছাকৃত হবে।
(dd bs=1 count=3 of=/dev/null; cat) <input >output। বা জিএনইউ সহ (head -c3 >/dev/null; cat)- এমনকি ইউটিএফ 8 বা অন্যান্য নন-সিঙ্গলবাইট লোকালেও; জিএনইউ হেড 'চর' = বাইট করে।
ভিআইএম-তে ফাইল খুলুন:
vi text.xml
বিওএম এনকোডিং সরান:
:set nobomb
সংরক্ষণ করুন এবং প্রস্থান করুন:
:wq
<feff>, তবুও :set nobombএটি কোনও পরিবর্তন বা সরাবে না।
তুমি ব্যবহার করতে পার
LANG=C LC_ALL=C sed -e 's/\r$// ; 1 s/^\xef\xbb\xbf//' -i -- filename
ফাইলের শুরু থেকে বাইট অর্ডার চিহ্নটি সরিয়ে ফেলতে, যদি তা থাকে তবে সেই সাথে কোনও সিআর এলএফ নিউলাইনগুলি কেবল এলএফতে রূপান্তর করে। LANG=C LC_ALL=Cশেল কমান্ড ডিফল্ট সি লোকেল (ডিফল্ট POSIX লোকেল নামে পরিচিত), যেখানে বাইট অর্ডার মার্ক বিরচন তিন বাইট বাইট হিসাবে গণ্য করা হয় চালাতে চান বলে। -iSed করার অপশন ইন-জায়গা মানে। আপনি যদি ব্যবহার করেন -i.oldতবে সেড মূল ফাইলটি filename.oldএবং নতুন ফাইলটিকে (যদি কোনও পরিবর্তন করে তবে) সংরক্ষণ করে filename।
আমি ব্যক্তিগতভাবে এটিকে পছন্দ করতে চাই ~/bin/fix-ms; উদাহরণস্বরূপ, হিসাবে
#!/bin/dash
export LANG=C LC_ALL=C
if [ $# -gt 0 ]; then
for FILE in "$@" ; do
sed -e 's/\r$// ; 1 s/^\xef\xbb\xbf//' -i -- "$FILE" || exit 1
done
else
exec sed -e 's/\r$// ; 1 s/^\xef\xbb\xbf//'
fi
যাতে আমার যদি সমস্ত সি উত্স ফাইল এবং শিরোনাম বলতে (এমএস-ডস যুগের আমার পুরানো কোড, উদাহরণস্বরূপ!) বলতে এটি প্রয়োগ করতে হয় তবে আমি কেবল চালাচ্ছি
find . -name '*.[CHch]' -print0 | xargs -r0 ~/bin/ms-fix
বা, আমি যদি কেবল কোনও ফাইলটি পরিবর্তন না করেই কেবল এটি দেখতে চাই তবে আমি চালাতে পারি
~/bin/ms-fix < filename | less
এবং <U+FEFF>আমার ইউটিএফ -8 টার্মিনালে কুরুচিপূর্ণ দেখতে পাবে না ।
sed -e 's/\r$// ; 1 s/^\xef\xbb\xbf//' -i -- "$@"?
sed -e 's/\r$// ; 1 s/^\xef\xbb\xbf//' -i -- "$@"না করে যদি স্ক্রিপ্টটি অবিলম্বে প্রস্থান করা হয় ; এটি একটি প্রস্থান কোড ফেরত দেয় তবে এটি প্রস্থান করার আগে যুক্তি তালিকায় তালিকাভুক্ত সমস্ত ফাইলকে প্রক্রিয়া করে।
--ফাইলের নাম (গুলি) এর আগে অবশ্যই গুরুত্বপূর্ণ: এটি ব্যতীত ড্যাশ দিয়ে শুরু হওয়া ফাইলের নামগুলি সেড দ্বারা বিকল্প হিসাবে বিবেচনা করা যেতে পারে। আমি আমার উত্তরে সেগুলি সম্পাদনা করেছি; অনুস্মারক জন্য আপনাকে ধন্যবাদ!
সম্প্রতি আমি এই ছোট্ট কমান্ড-লাইন সরঞ্জামটি পেয়েছি যা সালিসী UTF-8 এনকোডযুক্ত ফাইলগুলিতে বিওএম যুক্ত বা সরিয়ে দেয়: ইউটিএফ বিওএম ইউটিস ( গিথুবে নতুন লিঙ্ক )
সামান্য ব্যর্থতা, আপনি কেবল প্লেইন সি ++ উত্স কোডটি ডাউনলোড করতে পারেন। আপনাকে মেকফাইল তৈরি করতে হবে ( সিএমকে দিয়ে , উদাহরণস্বরূপ) এবং নিজের দ্বারা এটি সংকলন করতে হবে, বাইনারিগুলি এই পৃষ্ঠায় সরবরাহ করা হয়নি।