Linux 批量替換檔案內容
阿新 • • 發佈:2020-12-27
Linux 批量替換檔案內容
目錄
正題,替換不可見字元 <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操作