Kullanabilirsiniz
LANG=C LC_ALL=C sed -e 's/\r$// ; 1 s/^\xef\xbb\xbf//' -i -- filename
Herhangi bir CR LF yeni satırını sadece LF'ye dönüştürmenin yanı sıra, bayt sıra işaretini dosyanın başından kaldırmak için varsa. LANG=C LC_ALL=C
Komut Bayt al Mark oluşturan üç bayt bayt olarak kabul edilir (ayrıca varsayılan POSIX yerelinde olarak da bilinir) varsayılan C yerelinde, çalışmasını istediğiniz kabuk söyler. -i
Sed seçeneği yerinde demektir. Eğer kullanırsanız -i.old
, o zaman sed gibi orijinal dosyayı kaydeder filename.old
olarak (varsa, değişikliklerle) ve yeni bir dosya filename
.
Şahsen buna sahip olmayı seviyorum ~/bin/fix-ms
; örneğin,
#!/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
bu nedenle, tüm C kaynak dosya ve başlıklarını (örneğin, MS-DOS dönemindeki eski kodum!) söylemek için uygulamam gerekiyorsa, sadece çalıştırıyorum.
find . -name '*.[CHch]' -print0 | xargs -r0 ~/bin/ms-fix
veya, sadece böyle bir dosyaya bakmak istersem, değiştirmeden çalıştırabilirim
~/bin/ms-fix < filename | less
ve <U+FEFF>
UTF-8 terminalimde çirkin görmüyorum .