美文网首页
利用cat -v去除文件中的不可见特殊字符

利用cat -v去除文件中的不可见特殊字符

作者: 刘以浩 | 来源:发表于2017-08-18 10:33 被阅读0次
  • 本文虽然针对的是特殊字符“^@”,但对于其他不可见的特殊字符依然适用。核心思想就是利用cat -v将不可见字符转变为可见字符,而可见字符是可以利用各种命令处理的。

  • 今天处理一个文件的时候发现文件中字符间夹杂着特殊字符“^@”,这些特殊字符常态下是看不见的,但是可能会引发程序运行问题。此文件是从windows SQL Server中导出的数据,并传到Linux上来进行处理了。可以使用cat -v查看不可打印字符:

    #看似正常
    [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG 
    !@#qweasd412
    19960718.+0.
    513321262@qq.com
    qqq3356273
    13260362351
    wucheng25
    ZHAOGANG55555
    zl13994178341
    ytmfnia
    qaz911018
    #查看不可打印字符
    [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG | cat -v
    ^@!^@@^@#^@q^@w^@e^@a^@s^@d^@4^@1^@2^@
    ^@1^@9^@9^@6^@0^@7^@1^@8^@.^@+^@0^@.^@
    ^@5^@1^@3^@3^@2^@1^@2^@6^@2^@@^@q^@q^@.^@c^@o^@m^@
    ^@q^@q^@q^@3^@3^@5^@6^@2^@7^@3^@
    ^@1^@3^@2^@6^@0^@3^@6^@2^@3^@5^@1^@
    ^@w^@u^@c^@h^@e^@n^@g^@2^@5^@
    ^@Z^@H^@A^@O^@G^@A^@N^@G^@5^@5^@5^@5^@5^@
    ^@z^@l^@1^@3^@9^@9^@4^@1^@7^@8^@3^@4^@1^@
    ^@y^@t^@m^@f^@n^@i^@a^@
    ^@q^@a^@z^@9^@1^@1^@0^@1^@8^@
    
  • 查看文件类型
    可以发现文件类型是data,根据man手册,data是file命令不能识别的文件类型

    [root@localhost]/home/NEW_HW1# file OLD.ZIP-SHEGONG 
    OLD.ZIP-SHEGONG: data
    
  • dos2unix 命令无效

  • 去除特殊字符^@

    特殊字符^@并不是两个字符,而是一个字符,一个使用“ctrl+V ctrl+@”才能打出来的字符。
    网上提供了几种办法,但是没有解决问题:

    # 方法1
    [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG | tr -d '^@' | cat -v         
    ^@!^@^@#^@q^@w^@e^@a^@s^@d^@4^@1^@2^@
    ^@1^@9^@9^@6^@0^@7^@1^@8^@.^@+^@0^@.^@
    ^@5^@1^@3^@3^@2^@1^@2^@6^@2^@^@q^@q^@.^@c^@o^@m^@
    ^@q^@q^@q^@3^@3^@5^@6^@2^@7^@3^@
    ^@1^@3^@2^@6^@0^@3^@6^@2^@3^@5^@1^@
    ^@w^@u^@c^@h^@e^@n^@g^@2^@5^@
    ^@Z^@H^@A^@O^@G^@A^@N^@G^@5^@5^@5^@5^@5^@
    ^@z^@l^@1^@3^@9^@9^@4^@1^@7^@8^@3^@4^@1^@
    ^@y^@t^@m^@f^@n^@i^@a^@
    ^@q^@a^@z^@9^@1^@1^@0^@1^@8^@
    # 方法2
    [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG | sed 's/\^@//g' | cat -v  
    ^@!^@@^@#^@q^@w^@e^@a^@s^@d^@4^@1^@2^@
    ^@1^@9^@9^@6^@0^@7^@1^@8^@.^@+^@0^@.^@
    ^@5^@1^@3^@3^@2^@1^@2^@6^@2^@@^@q^@q^@.^@c^@o^@m^@
    ^@q^@q^@q^@3^@3^@5^@6^@2^@7^@3^@
    ^@1^@3^@2^@6^@0^@3^@6^@2^@3^@5^@1^@
    ^@w^@u^@c^@h^@e^@n^@g^@2^@5^@
    ^@Z^@H^@A^@O^@G^@A^@N^@G^@5^@5^@5^@5^@5^@
    ^@z^@l^@1^@3^@9^@9^@4^@1^@7^@8^@3^@4^@1^@
    ^@y^@t^@m^@f^@n^@i^@a^@
    ^@q^@a^@z^@9^@1^@1^@0^@1^@8^@
    
    
  • 试了网上的方法,没有成功,思考片刻,灵机一动,解决了问题:

    # 先使用cat -v将不可见字符转为可见字符再转换不就可以了吗
    # 注意,因为转变为了可见字符,所以^@成为了两个字符^和@
    [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG | cat -v | tr -d '^@' | cat -v
    !#qweasd412
    19960718.+0.
    513321262qq.com
    qqq3356273
    13260362351
    wucheng25
    ZHAOGANG55555
    zl13994178341
    ytmfnia
    qaz911018
    # or 
    [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG | cat -v | sed 's/\^@//g' | cat -v
    !@#qweasd412
    19960718.+0.
    513321262@qq.com
    qqq3356273
    13260362351
    wucheng25
    ZHAOGANG55555
    zl13994178341
    ytmfnia
    qaz911018
    
    
  • 进行真正的转换

    [root@localhost]/home/NEW_HW1# cat -v OLD.ZIP-SHEGONG | tr -d '^@' > t     
    # Everything is OK
    [root@localhost]/home/NEW_HW1# du -mh t
    1.1G    t
    [root@localhost]/home/NEW_HW1# du -mh OLD.ZIP-SHEGONG 
    2.2G    OLD.ZIP-SHEGONG
    # 文件类型也被file命令识别了
    [root@localhost]/home/NEW_HW1# file t
    t: ASCII text
    [root@localhost]/home/NEW_HW1# head -2 t | cat -v
    !#qweasd412
    19960718.+0.
    
    

相关文章

  • 利用cat -v去除文件中的不可见特殊字符

    本文虽然针对的是特殊字符“^@”,但对于其他不可见的特殊字符依然适用。核心思想就是利用cat -v将不可见字符转变...

  • Linux基本命令

    查看文件的内容cat 文件名 例如:查看文件(去除注释、去除空格的所有内容)cat 文件名 | grep -v "...

  • java去除字符串和数组中的重复元素

    利用正则表达式来去除字符串中重复的字符 利用HashMap来去除数组中重复的字符

  • Swift去除和替换特殊字符

    Swift去除和替换特殊字符 1、去除特殊字符 去除空格和换行 删除指定的字符 CharacterSet 里各个枚...

  • Swift 代码规范

    目录 源文件基础知识文件名文件编码空白字符特殊转义序列不可见的字符和修饰符字符串字面量不可见的字符和修饰符 源文件...

  • Linux 文件与目录管理

    文件内容查阅 cat 英文:Concatenate and write files-A 可以列出一些特殊字符,而非...

  • Linux文件相关命令

    文件相关命令 cat-b:列出行号,不包括空格-n:列出行号,包括空格-A:列出特殊字符 tac是cat的相反命令...

  • 清除文件中的BOM特殊不可见字符

    今天使用IDEA导入外部项目启动tomcat时,出现一个这样的一个错误Error:(1, 10) java: 需要...

  • 4.php字符串操作

    去除首尾空格和特殊字符 PHP中提供了三个去除首尾空格和特殊字符的方法: 1)trim() 函数用来去除字符串左右...

  • shell命令,给文件内容去重排序

    一去除文件中重复的行并排序,输出到新文件 cat filename |sort|uniq > outfilenam...

网友评论

      本文标题:利用cat -v去除文件中的不可见特殊字符

      本文链接:https://www.haomeiwen.com/subject/mcgorxtx.html