Bol*_*wyn 102 unicode awk byte-order-mark
awk用于删除BOM的脚本(可能是单线程)怎么样?
规格:
NR > 1)之后打印每一行#FE #FF或开头#FF #FE,则删除它们并打印其余部分Den*_*aia 122
使用GNU sed(在Linux或Cygwin上):
# Removing BOM from all text files in current directory:
sed -i '1 s/^\xef\xbb\xbf//' *.txt
在FreeBSD上:
sed -i .bak '1 s/^\xef\xbb\xbf//' *.txt
使用GNU或FreeBSD的优点sed:-i参数意味着"就地",并且将更新文件而无需重定向或奇怪的技巧.
在Mac上:
该awk解决方案的另一种回答的作品,但sed上面命令不起作用.至少在Mac(Sierra)sed文档中没有提到支持十六进制转义ala \xef.
通过sponge从moreutils管道到工具,任何程序都可以实现类似的技巧:
awk '…' INFILE | sponge INFILE
Bar*_*osz 111
试试这个:
awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}{print}' INFILE > OUTFILE
在第一个记录(行)上,删除BOM字符.打印每条记录.
或略短,使用awk中的默认操作来打印记录的知识:
awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}1' INFILE > OUTFILE
1 是始终评估为真的最短条件,因此每条记录都会打印出来.
请享用!
- 附加 -
Unicode字节顺序标记(BOM)常见问题解答包括下表,其中列出了每种编码的确切BOM字节:
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上表中的BOM字节对应.
Ste*_*lay 41
不是awk,而是更简单:
tail -c +4 UTF8 > UTF8.nobom
要检查BOM:
hd -n 3 UTF8
如果BOM存在,您将看到: 00000000  ef bb bf ...
Lri*_*Lri 20
除了将CRLF线路结尾转换为LF之外,dos2unix还可以删除BOM:
dos2unix *.txt
dos2unix 还将带有BOM(但不是没有BOM的UTF-16文件)的UTF-16文件转换为UTF-8而不使用BOM:
$ 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
| 归档时间: | 
 | 
| 查看次数: | 78480 次 | 
| 最近记录: |