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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM