1. 程式人生 > 其它 >Linux 批量替換檔案內容

Linux 批量替換檔案內容

技術標籤:# 小技巧linuxshell批量替換字串

Linux 批量替換檔案內容

目錄

Linux 批量替換檔案內容

場景前提

Linux find 命令

Linux sed命令

引數說明:

動作說明:

正則例項

正題,替換不可見字元 <0x00>, vim 開啟可能會顯示 ^@

注意事項


場景前提

由於編輯器批量操作或者其他誤操作,且沒有線上程式碼倉庫,或者無法通過程式碼倉庫回滾(原因是本地修改了大量的程式碼)而導致要批量修改檔案內容要怎麼辦。目前的情況就是公司防禦沒有做好,導致未提交的程式碼被加密了,雖然最後搶救回來,但是解密後的檔案被大量添加了 不可見的字串 <0x00> 熟悉Linux的都知道遇到這個就會停止讀取了。而且在編輯器看起來非常難看,sublime有批量資料夾替換,但是量太多太卡了,不理想。最後決定用Linux下shell命令列來搞

Linux find 命令

find [路徑] [引數]

find ./ -type f

其他引數就不解釋了,上面的意思就是查詢當前目錄下所有所有普通檔案 ,當然你也可以指定特定的一個檔案

Linux sed命令

sed [-hnV][-e<script>][-f<script檔案>][文字檔案]

引數說明:

  • -e<script>或--expression=<script> 以選項中指定的script來處理輸入的文字檔案。
  • -f<script檔案>或--file=<script檔案> 以選項中指定的script檔案來處理輸入的文字檔案。
  • -h或--help 顯示幫助。
  • -n或--quiet或--silent 僅顯示script處理後的結果。
  • -V或--version 顯示版本資訊。

動作說明

  • a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
  • c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
  • d :刪除,刪除匹配的字串,所以 d 後面通常不接任何東西;
  • i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
  • p :列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起執行~
  • s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!

正則例項

sed -i "s/search/replace/g" ./test.txt

解釋:

在test.txt檔案中全域性正則匹配到 search【改成你需要的】字串 並替換為 replace 【改成你需要的】字串,格式就是 s/匹配字串/替換的字串/g

正題,替換不可見字元 <0x00>, vim 開啟可能會顯示 ^@

sed -i "s/\x00//g" `find ./ -type f;`

最終替換命令組合為上面所示。意思是全域性替換當前目下所有普通檔案中包含不可見字元 <0x00> 為空字元,也就是去掉 <0x00>

注意事項

sed -i 引數代表直接修改原檔案,請測試好之後再執行命令,並且做好備份

如果只是一小部分檔案含有,或者要替換含有特定內容的檔案,請用grep命令來過濾檔案而不是find全部列舉,使不必要檔案進行sed操作