linux下查找文件BOM头并去除

  在公司做项目的时候,经常要把在电脑上开发的程序拷贝到嵌入式平板里进行编译并且运行(是的,公司开发出来的辣鸡平板竟然没有交叉编译工具链……),然鹅,在平板里打开程序一看,怎么文件头出现了几个乱码,打算先不管,结果编译的时候一堆错误,没办法,删呗。然后就开启沙雕般的操作,一个一个地找,一个一个删,费了半天时间,终于改完。喝杯水冷静一下,看看文件头的代码是何方神圣。不查不知道,一查吓一跳,这特么原来是BOM……吐血,智障一般的设计,然而更智障的是平板系统里的编译器竟然无法自动忽略(这东西不属于代码的一部分……)。不过好在这个东西是固定的,那就让我在linux的命令行里施展点“魔法”,让BOM全部滚蛋。

  首先来了解一下什么是BOM。BOM是用来判断文本文件是属于哪一种Unicode编码的标记,其本身是一个Unicode字符,位于文本文件头部,不同的Unicode编码会对应不同的字节,例如

    FE FF 对应 UTF16BE

    FF FE 对应 UTF16LE

    EF BB BF对应 UTF8

  既然要把他们揪出来,则需要用到神器grep(nice,我爱linux),接下来就是一顿猛如虎的操作了,先查找,再删除(其实应该是用空格替换?)

  

grep -r -i -l $'^\xEF\xBB\xBF' . | xargs sed -i 's/^\xEF\xBB\xBF//g'

  或者不需要递归目录

grep  -i -l $'^\xEF\xBB\xBF' . | xargs sed -i 's/^\xEF\xBB\xBF//g'

  这个处理起来就很舒服了,可以安心的编译了

  

posted @ 2018-10-16 21:09  Roger羣  阅读(1417)  评论(0编辑  收藏  举报