Linux替换文件中的字符串
将当前目录下所有的 txt 文件中的“xyz”替换成“abc”
perl -p -i -e "s/xyz/abc/g" ./*.txt
将 ~/mysqlsh/dump 目录下所有的 sql 文件中的“xyz”替换成“abc”
perl -p -i -e "s/xyz/abc/g" ~/mysqlsh/dump/*.sql
将当前目录下所有的 txt 文件中的“NUL”替换成“”
perl -p -i -e "s/\x00//g" ./*.txt
或者
perl -p -i -e "s/[\x0]//g" ./*.txt
特殊字符替换参考以下的转义字符对应表(PS:摘自百度百科)
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符''' | 092 |
' | 代表一个单引号(撇号)字符 | 039 |
" | 代表一个双引号字符 | 034 |
? | 代表一个问号 | 063 |
\0 | 空字符(NUL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 十六进制所代表的任意字符 | 十六进制 |
注意:
1.区分,斜杠:"/" 与 反斜杠:"" ,此处不可互换
2.\xhh 十六进制转义不限制字符个数 '\x000000000000F' == '\xF'
Linux对文件中的特殊字符进行替换(摘自SCDN:https://blog.csdn.net/xfg0218/article/details/81362737)
替换当前文件夹下所有文本中的特殊字符
# cat asciiReplaceScriptAll.sh
#!bin/sh
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
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 abc_ma_ka_ba_ka.txt
参数说明
此脚本会替换文件中的特殊字符,第一个参数是带有特殊字符的文件
例如: sh asciiReplaceScriptSimple.sh asciiFile.log
转换开始......
转换结束......
脚本耗时:0s