zoukankan      html  css  js  c++  java
  • linux的文件编码问题--为什么grep不到我想要的内容

    今天遇到一个在linux环境下的文件编码问题,搞了好久才搞明白。

    先说说背景:

    有一个这样的文件,文件test.txt内容如下:

    abcdefghijklmnopqrst

    hfjkdafldsfkfjkaddjfka

    然后我想过滤出以a开头的文件内容,命令如下:

    cat test.txt|egrep '^a'

    一看这命令没啥毛病,是可以过滤出第一行的内容来。然而,过滤结果却没有出现我预期的效果。不能够啊,这命令我用了N多年了,难道我记错了???于是乎我各种百度,各种尝试,把命令换成如下:

    egrep '^a' test.txt

    结果呢,呵呵。一样不管用啊。what the ***!百思不得其解啊。接着又是各种尝试。

    echo abcdefghijklmnopqrst | egrep '^a'

    哎呦喂,这样就可以过滤出来了,耍我呢。

    再接着试:

    echo abcdefghijklmnopqrst > test2.txt

    cat test2.txt  | egrep '^a'

    你猜结果怎么样,这就没问题了!!!证明过滤命令是没有错的。

    那是什么原因??一样的命令,却出现不一样的结果。说到这里,想你也能猜到了吧,文件编码不一样导致的结果!!

    来让我们看看这个文件编码是什么样子的。

    $ file test.txt
    test.txt: UTF-8 Unicode (with BOM) text, with CRLF line terminators
    $ file test2.txt
    test2.txt: ASCII text

    $ enca test.txt
    Universal transformation format 8 bits; UTF-8
    CRLF line terminators
    $ enca test2.txt
    7bit ASCII characters

    看看,表面看着一样的内容,实际上连长度都不一样。在ASCII编码格式中是a开头,在UTF-8格式中却不是a开头了,尽管你的肉眼看到的是以a开头。哎,坑。折腾了我好几个小时。

    记录一下,以后再碰见这样的问题也知道是怎么回事了,也给在踩一样坑的小伙伴们借鉴一下。

  • 相关阅读:
    二叉树的最大距离
    MS CRM 2011 RibbonExport Utility下载以及实用说明
    MS CRM 2011中的解决方案——使用
    MS CRM 2011的自定义与开发(5)——关系编辑器
    MS CRM 2011 RC中的新特性(5)——定期约会
    MS CRM2011中的事件脚本——入门
    MS CRM 2011 汇总更新 3
    MS CRM 4中模拟PartyList字段的方法
    MS CRM 2011的自定义与开发(4)——属性编辑器
    MS CRM 2011中的解决方案Solution_简介
  • 原文地址:https://www.cnblogs.com/hulk-1029/p/11321882.html
Copyright © 2011-2022 走看看