工作中遇到文件中含有 ASCII 控制字符的情况,其转成的 json 无法入 elasticsearch。开始使用 java 来做替换处理,后来发现使用 sed 效率高出很多。现将该段 sed 命令记录下来,其中 ASCII 码参考:
https://baike.baidu.com/item/ASCII/309296?fr=aladdin&fromid=19660475&fromtitle=ascii%E7%A0%81%E8%A1%A8

写成多行便于观察(实际使用时是写成一行)

sed -r -e 's/\x00/[NUL]/g'
 -e 's/\x01/[SOH]/g'
 -e 's/\x02/[STX]/g'
 -e 's/\x03/[ETX]/g'
 -e 's/\x04/[EOT]/g'
 -e 's/\x05/[ENQ]/g'
 -e 's/\x06/[ACK]/g'
 -e 's/\x07/[BEL]/g'
 -e 's/\x08/[BS]/g'
 -e 's/\x0A/[LF]/g'
 -e 's/\x0B/[VT]/g'
 -e 's/\x0C/[FF]/g'
 -e 's/\x0D/[CR]/g'
 -e 's/\x0E/[SO]/g'
 -e 's/\x0F/[SI]/g'
 -e 's/\x10/[DLE]/g'
 -e 's/\x11/[DC1]/g'
 -e 's/\x12/[DC2]/g'
 -e 's/\x13/[DC3]/g'
 -e 's/\x14/[DC4]/g'
 -e 's/\x15/[NAK]/g'
 -e 's/\x16/[SYN]/g'
 -e 's/\x17/[ETB]/g'
 -e 's/\x18/[CAN]/g'
 -e 's/\x19/[EM]/g'
 -e 's/\x1A/[SUB]/g'
 -e 's/\x1B/[ESC]/g'
 -e 's/\x1C/[FS]/g'
 -e 's/\x1D/[GS]/g'
 -e 's/\x1E/[RS]/g'
 -e 's/\x1F/[US]/g'
 -e 's/\x7F/[DEL]/g'
 file_in > file_out

写成一行

sed -r -e 's/\x00/[NUL]/g' -e 's/\x01/[SOH]/g' -e 's/\x02/[STX]/g' -e 's/\x03/[ETX]/g' -e 's/\x04/[EOT]/g' -e 's/\x05/[ENQ]/g' -e 's/\x06/[ACK]/g' -e 's/\x07/[BEL]/g' -e 's/\x08/[BS]/g' -e 's/\x0A/[LF]/g' -e 's/\x0B/[VT]/g' -e 's/\x0C/[FF]/g' -e 's/\x0D/[CR]/g' -e 's/\x0E/[SO]/g' -e 's/\x0F/[SI]/g' -e 's/\x10/[DLE]/g' -e 's/\x11/[DC1]/g' -e 's/\x12/[DC2]/g' -e 's/\x13/[DC3]/g' -e 's/\x14/[DC4]/g' -e 's/\x15/[NAK]/g' -e 's/\x16/[SYN]/g' -e 's/\x17/[ETB]/g' -e 's/\x18/[CAN]/g' -e 's/\x19/[EM]/g' -e 's/\x1A/[SUB]/g' -e 's/\x1B/[ESC]/g' -e 's/\x1C/[FS]/g' -e 's/\x1D/[GS]/g' -e 's/\x1E/[RS]/g' -e 's/\x1F/[US]/g' -e 's/\x7F/[DEL]/g' file_in > file_out

其中的 \x00-\x1F 以及 \x7F 是 ASCII 码的控制字符,本替换要做的事是将这些字符替换成 “[NUL]” 这类的可见字符,以达到去除 ASCII 乱码的目的。本段代码中没有处理 \x09,因为 \x09 是 HT(横向制表符),即 \t 。对 \x09 的替换可以单独处理:

如果想把 \t 替换成空格,则在上段代码中加入

-e 's/\x09/ /g'

如果想把 \t 删掉,则在上段代码中加入

-e 's/\x09//g'

如果想把 \t 替换成 [HT],则在上段代码中加入

-e 's/\x09/[HT]/g'

用 sed 去除文件中的 ASCII 控制字符乱码相关推荐

  1. python去重复行_python去除文件中重复的行实例

    python去除文件中重复的行,我们可以设置一个一个空list,res_list,用来加入没有出现过的字符行! 如果出现在res_list,我们就认为该行句子已经重复了,可以再加入到记录重复句子的li ...

  2. 【Java文件操作(五)】从txt文件中读取字符串、乱码原因

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  3. linux 文件转换ascii,linux 小技巧(查找替换文件中的ascii编码字符)

    这里纪录一些linux下用到的小技巧,以免遗忘 在linux中经常碰见各种文件处理.最常用的就是替换文件中的某些字符.常见字符替换还是很容易完成.但是有些不可见字符以及ascii编码字符等等都无法直接 ...

  4. 用sed替换文件中的空格

    请教sed 替换问题 请教各位如何替换多个空格为一个字符,如一个文件中间隔符有是一个空格,有的地方是多个空格,想全部用"|"替换,如何处理,请指教 请教sed 替换问题 [code ...

  5. linux去除文件中重复行,Linux Shell教程 - 如何删除重复的文本行

    需要对日志文件中的数据进行排序,但是有太多重复的行. 如何从GNU/Linux下的文本文件中删除所有重复的行? 您需要使用shell管道以及以下两个Linux命令行实用程序来排序和删除重复的文本行: ...

  6. 用sed删除文件中指定行

    删除第N行: sed -i 'Nd' filename 删除第M到N行: sed -i 'M,Nd' filename sed -e '/abc/d'  a.txt   // 删除a.txt中含&qu ...

  7. [转载]去除文件中的^M

    用/bin/cat -v /etc/profile看到很多^M,是因为Windows下的换行符的原因. 现在在linux下面删了就行,我用的第一种方法. 第一种方法 (先yum install -y ...

  8. shell中通过sed替换文件中路径

    通常sed指令修改行内容时使用:sed -i " 9 s/^.*/"type in what you want modified!"/" 其中"typ ...

  9. linux shell sed 在一个文件中插入另一个文件

    sed是在不打开文件的情况下进行操作的利器. 如果知道行号可以用 sed -i '88 r b.txt' a.txt #在a.txt的第88行插入文件b.txt 如果不改变源文件,可以去掉-i开关,修 ...

最新文章

  1. python语言是一种高级通用编程语言-2019年十大顶级编程语言:会这些的程序员薪资有多高?...
  2. 电动力学每日一题 2021/10/11
  3. java无法实例化类型_java – 无法实例化泛型中的类型
  4. 文巾解题 11. 盛最多水的容器
  5. SIP for android
  6. scrapy 整合 djangoitem,摆脱保存数据时SQL报错的困扰
  7. java main生命周期_java的生命周期
  8. 超燃!奇安信首度对外公开内部网络攻防演习纪实片
  9. iText导出pdf、word、图片
  10. 直接在Google Chrome浏览器中查看文档和PDF
  11. java hotmail日历,我用java写的日历
  12. 偶的流氓老公zt (超搞笑-转)
  13. 关于网页加载慢的一个解决方法——取消勾选【局域网设置】中的【自动检测设置】
  14. 企业安全风险的来源有哪些?
  15. elementUI——form表单
  16. Javascript 暂停/终止脚本
  17. 千学计算机在线计算,压力单位在线换算
  18. 在线考试系统总体设计
  19. 鸿蒙应用开发 | 文本框(Text)和编辑框(TextField)的功能与用法
  20. RK3588平台开发系列讲解(SATA篇)SATA驱动配置说明

热门文章

  1. Totem “电影播放机” 怎么装解码器
  2. 工作日记 day03
  3. 词袋模型(视觉词袋模型BOVW)详解
  4. “MuseScore”面世,人类仅凭意识来作曲已不是梦想
  5. vim delete to the beginning of the line
  6. 《筱静观察》| 金融科技与大数据时代:机遇与风险并存
  7. 饿了么、哈罗单车相互助力,美团、摩拜危机重重
  8. CNNIC发布《第20次中国互联网络发展状况统计报告》
  9. 一支口红用了5年_一支口红可以用多久 口红保质期
  10. 什么软件可以把图片转换成表格?这三款能够帮助到你