前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux对文件中的特殊字符进行替换(单个文件与多个文件替换)

Linux对文件中的特殊字符进行替换(单个文件与多个文件替换)

作者头像
小徐
发布2019-08-05 14:44:40
6K0
发布2019-08-05 14:44:40
举报
文章被收录于专栏:GreenplumGreenplum

参考资料

https://stackoverflow.com/questions/5800035/how-to-replace-nul-in-vi

中片段解析为:

That symbol represents a NULL character, with ASCII value 000.

You could try:

代码语言:javascript
复制
:%s/\%x00/ /g

https://blog.csdn.net/a14206149/article/details/52595092

http://vim.1045645.n5.nabble.com/search-for-null-td1194026.html

可替换以下的特殊字符

开始全部替换脚本

# cat asciiReplaceScriptAll.sh

#!bin/sh

# 特殊字符查看表 # https://blog.csdn.net/xfg0218/article/details/80901752

echo "参数说明" echo -e "\t 把此脚本复制到带有特殊字符的文件夹下运行此脚本即可把全部文件进行替换,例如:sh asciiReplaceScript.sh" echo

echo -e "\t 转换开始...... \n "

# 设置脚本开始时间 starttime=`date +'%Y-%m-%d %H:%M:%S'`

# 特殊字符的集合,28是特殊字符的10进制代码 soh=`echo 1 | awk '{printf("%c", $1)}'` stx=`echo 2 | awk '{printf("%c", $1)}'` etx=`echo 3 | awk '{printf("%c", $1)}'` eot=`echo 4 | awk '{printf("%c", $1)}'` enq=`echo 5 | awk '{printf("%c", $1)}'` ack=`echo 6 | awk '{printf("%c", $1)}'` bel=`echo 7 | awk '{printf("%c", $1)}'` bs=`echo 8 | awk '{printf("%c", $1)}'` ht=`echo 9 | awk '{printf("%c", $1)}'` lf=`echo 10 | awk '{printf("%c", $1)}'` vt=`echo 11 | awk '{printf("%c", $1)}'` ff=`echo 12 | awk '{printf("%c", $1)}'` cr=`echo 13 | awk '{printf("%c", $1)}'` so=`echo 14 | awk '{printf("%c", $1)}'` si=`echo 15 | awk '{printf("%c", $1)}'` dle=`echo 16 | awk '{printf("%c", $1)}'` dc1=`echo 17 | awk '{printf("%c", $1)}'` dc2=`echo 18 | awk '{printf("%c", $1)}'` dc3=`echo 19 | awk '{printf("%c", $1)}'` dc4=`echo 20 | awk '{printf("%c", $1)}'` nak=`echo 21 | awk '{printf("%c", $1)}'` syn=`echo 22 | awk '{printf("%c", $1)}'` etb=`echo 23 | awk '{printf("%c", $1)}'` can=`echo 24 | awk '{printf("%c", $1)}'` em=`echo 25 | awk '{printf("%c", $1)}'` sub=`echo 26 | awk '{printf("%c", $1)}'` esc=`echo 27 | awk '{printf("%c", $1)}'` fs=`echo 28 | awk '{printf("%c", $1)}'` gs=`echo 29 | awk '{printf("%c", $1)}'` rs=`echo 30 | awk '{printf("%c", $1)}'` us=`echo 31 | awk '{printf("%c", $1)}'` del=`echo 127 | awk '{printf("%c", $1)}'`

# 循环把文件下的所有文件取出来 for replaceFile in `ls *` do

# 去除此脚本文件 if [ $replaceFile = $0 ];then continue; fi

echo -e "\t 文件" $replaceFile "替换开始...."

# 单个文件处理的额开始时间 single_time=`date +'%Y-%m-%d %H:%M:%S'`

# 单个文件替换开始 sed -i -e 's/[\x0]//g' -e 's/'$soh'//g' -e 's/'$stx'//g' -e 's/'$etx'//g' -e 's/'$eot'//g' -e 's/'$enq'//g' -e 's/'$ack'//g' -e 's/'$bel'//g' -e 's/'$bs'//g' -e 's/'$lf'//g' -e 's/'$vt'//g' -e 's/'$ff'//g' -e 's/'$cr'//g' -e 's/'$so'//g' -e 's/'$si'//g' -e 's/'$dle'//g' -e 's/'$dc1'//g' -e 's/'$dc2'//g' -e 's/'$dc3'//g' -e 's/'$dc4'//g' -e 's/'$nak'//g' -e 's/'$syn'//g' -e 's/'$etb'//g' -e 's/'$can'//g' -e 's/'$em'//g' -e 's/'$sub'//g' -e 's/'$esc'//g' -e 's/'$fs'//g' -e 's/'$gs'//g' -e 's/'$rs'//g' -e 's/'$us'//g' -e 's/'$del'//g' -e 's/'$'//g' $replaceFile

# 就算单个文件耗时 single_endtime=`date +'%Y-%m-%d %H:%M:%S'` single_start_seconds=$(date --date="$single_time" +%s); single_end_seconds=$(date --date="$single_endtime" +%s);

echo -e "\t 文件" $replaceFile "替换结束,耗时:"$((single_end_seconds-single_start_seconds))"s" echo -e "\n"

done

echo -e "\t 全部文件转换结束......"

# 全部文件替换的总耗时 endtime=`date +'%Y-%m-%d %H:%M:%S'` start_seconds=$(date --date="$starttime" +%s); end_seconds=$(date --date="$endtime" +%s);

echo -e "\t 脚本总耗时:"$((end_seconds-start_seconds))"s"

# 退出脚本 exit

运行效果

[root@sggp ascii]# sh asciiReplaceScriptAll.sh 参数说明 把此脚本复制到带有特殊字符的文件夹下运行此脚本即可把全部文件进行替换,例如:sh asciiReplaceScript.sh

转换开始...... 文件 asciiReplaceScriptSimple.sh 替换开始.... 文件 asciiReplaceScriptSimple.sh 替换结束,耗时:0s

文件 asciiTest1.log 替换开始.... 文件 asciiTest1.log 替换结束,耗时:0s

文件 asciiTest2.log 替换开始.... 文件 asciiTest2.log 替换结束,耗时:0s

文件 asciiTest.log 替换开始.... 文件 asciiTest.log 替换结束,耗时:0s

文件 xiaoxu.sh 替换开始.... 文件 xiaoxu.sh 替换结束,耗时:0s

全部文件转换结束...... 脚本总耗时:0s

开始单个文件替换脚本

#!bin/sh

# 特殊字符查看表 # https://blog.csdn.net/xfg0218/article/details/80901752

echo "参数说明" echo -e "\t 此脚本会替换文件中的特殊字符,第一个参数是带有特殊字符的文件" echo -e "\t 例如: sh asciiReplaceScriptSimple.sh asciiFile.log" echo

# 对输入参数进行校验 if [ ! -n "$1" ];then echo -e "\t 请输入需要替换的文件...." exit fi

echo -e "\t 转换开始......"

starttime=`date +'%Y-%m-%d %H:%M:%S'`

# 特殊字符的集合,28是特殊字符的10进制代码 soh=`echo 1 | awk '{printf("%c", $1)}'` stx=`echo 2 | awk '{printf("%c", $1)}'` etx=`echo 3 | awk '{printf("%c", $1)}'` eot=`echo 4 | awk '{printf("%c", $1)}'` enq=`echo 5 | awk '{printf("%c", $1)}'` ack=`echo 6 | awk '{printf("%c", $1)}'` bel=`echo 7 | awk '{printf("%c", $1)}'` bs=`echo 8 | awk '{printf("%c", $1)}'` ht=`echo 9 | awk '{printf("%c", $1)}'` lf=`echo 10 | awk '{printf("%c", $1)}'` vt=`echo 11 | awk '{printf("%c", $1)}'` ff=`echo 12 | awk '{printf("%c", $1)}'` cr=`echo 13 | awk '{printf("%c", $1)}'` so=`echo 14 | awk '{printf("%c", $1)}'` si=`echo 15 | awk '{printf("%c", $1)}'` dle=`echo 16 | awk '{printf("%c", $1)}'` dc1=`echo 17 | awk '{printf("%c", $1)}'` dc2=`echo 18 | awk '{printf("%c", $1)}'` dc3=`echo 19 | awk '{printf("%c", $1)}'` dc4=`echo 20 | awk '{printf("%c", $1)}'` nak=`echo 21 | awk '{printf("%c", $1)}'` syn=`echo 22 | awk '{printf("%c", $1)}'` etb=`echo 23 | awk '{printf("%c", $1)}'` can=`echo 24 | awk '{printf("%c", $1)}'` em=`echo 25 | awk '{printf("%c", $1)}'` sub=`echo 26 | awk '{printf("%c", $1)}'` esc=`echo 27 | awk '{printf("%c", $1)}'` fs=`echo 28 | awk '{printf("%c", $1)}'` gs=`echo 29 | awk '{printf("%c", $1)}'` rs=`echo 30 | awk '{printf("%c", $1)}'` us=`echo 31 | awk '{printf("%c", $1)}'` del=`echo 127 | awk '{printf("%c", $1)}'`

# 替换开始 sed -i -e 's/[\x0]//g' -e 's/'$soh'//g' -e 's/'$stx'//g' -e 's/'$etx'//g' -e 's/'$eot'//g' -e 's/'$enq'//g' -e 's/'$ack'//g' -e 's/'$bel'//g' -e 's/'$bs'//g' -e 's/'$lf'//g' -e 's/'$vt'//g' -e 's/'$ff'//g' -e 's/'$cr'//g' -e 's/'$so'//g' -e 's/'$si'//g' -e 's/'$dle'//g' -e 's/'$dc1'//g' -e 's/'$dc2'//g' -e 's/'$dc3'//g' -e 's/'$dc4'//g' -e 's/'$nak'//g' -e 's/'$syn'//g' -e 's/'$etb'//g' -e 's/'$can'//g' -e 's/'$em'//g' -e 's/'$sub'//g' -e 's/'$esc'//g' -e 's/'$fs'//g' -e 's/'$gs'//g' -e 's/'$rs'//g' -e 's/'$us'//g' -e 's/'$del'//g' -e 's/'$'//g' $1

echo -e "\t 转换结束......"

endtime=`date +'%Y-%m-%d %H:%M:%S'` start_seconds=$(date --date="$starttime" +%s); end_seconds=$(date --date="$endtime" +%s);

echo -e "\t 脚本耗时:"$((end_seconds-start_seconds))"s"

# 退出脚本 exit

单个文件替换效果如下

[root@sggp ascii]# sh asciiReplaceScriptSimple.sh xiaoxu.sh 参数说明 此脚本会替换文件中的特殊字符,第一个参数是带有特殊字符的文件 例如: sh asciiReplaceScriptSimple.sh asciiFile.log

转换开始...... 转换结束...... 脚本耗时:0s

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 河马coding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考资料
  • 开始全部替换脚本
  • 运行效果
  • 开始单个文件替换脚本
  • 单个文件替换效果如下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档