• 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
     退格(BS) ,将当前位置移到前一列 008
    f 换页(FF),将当前位置移到下页开头 012
    换行(LF) ,将当前位置移到下一行开头 010
    回车(CR) ,将当前位置移到本行开头 013
    水平制表(HT) (跳到下一个TAB位置) 009
    v 垂直制表(VT) 011
    代表一个反斜线字符''' 092
    ' 代表一个单引号(撇号)字符 039
    " 代表一个双引号字符 034
    ? 代表一个问号 063
    空字符(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 "	 把此脚本复制到带有特殊字符的文件夹下运行此脚本即可把全部文件进行替换,例如:sh asciiReplaceScript.sh"
    echo
    
    echo -e "	 转换开始...... 
     "
    
    # 设置脚本开始时间
    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 "	 文件" $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 "	 文件" $replaceFile "替换结束,耗时:"$((single_end_seconds-single_start_seconds))"s"
    echo -e "
    "
    
    done
    
    echo -e "	 全部文件转换结束......"
    
    # 全部文件替换的总耗时
    endtime=`date +'%Y-%m-%d %H:%M:%S'`
    start_seconds=$(date --date="$starttime" +%s);
    end_seconds=$(date --date="$endtime" +%s);
    
    echo -e "	 脚本总耗时:"$((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 "	 此脚本会替换文件中的特殊字符,第一个参数是带有特殊字符的文件"
            echo -e "	 例如: sh asciiReplaceScriptSimple.sh  asciiFile.log"
    echo
    
    # 对输入参数进行校验
    if [ ! -n "$1" ];then
       echo -e "	 请输入需要替换的文件...."
    exit
    fi
    
    echo -e "	 转换开始......"
    
    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 "	 转换结束......"
    
    endtime=`date +'%Y-%m-%d %H:%M:%S'`
    start_seconds=$(date --date="$starttime" +%s);
    end_seconds=$(date --date="$endtime" +%s);
    
    echo -e "	 脚本耗时:"$((end_seconds-start_seconds))"s"
    
    # 退出脚本
    exit
    
    替换单个文本中的特殊字符运行效果
    [root@sggp ascii]# sh  asciiReplaceScriptSimple.sh abc_ma_ka_ba_ka.txt
    参数说明
         此脚本会替换文件中的特殊字符,第一个参数是带有特殊字符的文件
         例如: sh asciiReplaceScriptSimple.sh  asciiFile.log
    
         转换开始......
         转换结束......
         脚本耗时:0s
    
  • 相关阅读:
    Docker容器操作
    Docker的镜像操作
    CentOs安装Docker
    超长字符串
    编程之美-2.11 扩展 寻找距离最远的两个点
    编程之美-2.8 找到符合条件的整数
    编程之美-2.4 1的数目
    编程之美-1.16 24点游戏
    logistic回归 c++ 实现
    朴素贝页斯分类法 c++实现
  • 原文地址:https://www.cnblogs.com/mjtabu/p/15014296.html
Copyright © 2020-2023  润新知