তুমি ব্যবহার করতে পার
LANG=C LC_ALL=C sed -e 's/\r$// ; 1 s/^\xef\xbb\xbf//' -i -- filename
ফাইলের শুরু থেকে বাইট অর্ডার চিহ্নটি সরিয়ে ফেলতে, যদি তা থাকে তবে সেই সাথে কোনও সিআর এলএফ নিউলাইনগুলি কেবল এলএফতে রূপান্তর করে। LANG=C LC_ALL=C
শেল কমান্ড ডিফল্ট সি লোকেল (ডিফল্ট POSIX লোকেল নামে পরিচিত), যেখানে বাইট অর্ডার মার্ক বিরচন তিন বাইট বাইট হিসাবে গণ্য করা হয় চালাতে চান বলে। -i
Sed করার অপশন ইন-জায়গা মানে। আপনি যদি ব্যবহার করেন -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 টার্মিনালে কুরুচিপূর্ণ দেখতে পাবে না ।