用 sed 去除文件中的 ASCII 控制字符乱码

工作中遇到文件中含有 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'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值