1. 首頁
  2. »
  3. MAC
  4. »
  5. [MAC] sed指令可大量的取代文字字串,並支援正規表示法

[MAC] sed指令可大量的取代文字字串,並支援正規表示法

2017/09/13

梅問題-[MAC]sed指令大量的取代文字字串

  當梅干要開始動手設計WordPress的佈景主題時,若對方是全新的網站,那在設計上就可以比較包袍,也較無限制,因此一切都是從零開始,所以當怎麼設計,之後在上資料時,只需按照當初所設定的方式,就能讓文章正確的顯示,也無任何跑版的問題,但今天若是已經營一段時間,資料庫已有些資料時,梅干第一時間,都會先要資料庫檔,並將資料庫匯入模擬的環境中,了解一下之前的文章結構,並依照原先的架構來進行設計,才不會佈景設計完後,再大批的修改4000~5000的文章,那就真的很累人,當拿到sql的資料庫檔案後,接著就是將資料庫匯入,但就在匯入的過程中,竟然出現錯誤碼,無法辨視utf8mb4_unicode_520_ci的編碼,本來以為是留言區的資料欄位,但最後發現即便將回應拿掉,還是出現一樣的錯誤碼,於是梅干認真的研究一下後,才發現到,原來這跟MySQL資料庫的版本有關,新版的資料庫,內建就有utf8mb4_unicode_520_ci編碼,但舊版的MySQL並沒有。


  因此要解決這問題,也很簡單,只需將sql中的utf8mb4_unicode_520_ci替換成utf8mb4_unicode_ci就好了,再加上sql只需一般文件工具就可開啟,並且再搭配文件工具中的替換字串功能,就能解決此問題,但梅干光是開這400m的資料庫檔就開半天,更別說要用替換文件中的文字,因此搞了好久,好在有好友山羊的協助,才讓梅干知道,原來使用MAC可透過終端機下sed指令,就可大批的將sql中的字串給替換掉,同時透過終端機,不但替換速度快,甚至在替換過程中,也不用先將400mb的sql給開啟,而sed指令不只侷限於sql檔,任何文件檔,皆可透過sed來進行替換,再加上sed也支援正規表示法,因此當有較進階的需求,也可研究一下它的正規表示法的支援程度,但這邊梅干只分享,簡易sed指令取代字串的方法,因此下回當有大批的文字要替換時,不妨可試試此方法囉!


Step1
一般的sql 只需用文字編輯器,就可將它開啟,但檔案太大時,除了開很久外,再來就是反應變超頓,從這可看到,編碼的部分為utf8mb4_unicode_520_ci,而只需將utf8mb4_unicode_520_ci替換成utf8mb4_unicode_ci就可以了,但因為sql檔太大,梅干試了許多套的文字編輯器執行到一半就當掉了。
梅問題-[MAC]sed指令大量的取代文字字串


Step2
首先,先取得sql的路徑位置。
梅問題-[MAC]sed指令大量的取代文字字串


Step3
接著開啟MAC的終端機,並輸入下方的語法,綠色是原來的字串,紅色是要替換的文字,最後則是sql的路徑位置。

sed -i ” ‘s/原字串/替換字串/g’ 檔案位置

梅問題-[MAC]sed指令大量的取代文字字串


Step4
再按下Enter鍵後,以400mb的sql檔,差不多10~20秒就可替換完成。
梅問題-[MAC]sed指令大量的取代文字字串


Step5
替換好後,再開啟來看看,哈~剛的utf8mb4_unicode_520_ci終於全部變成utf8mb4_unicode_ci,這樣就可順利的將sql匯入啦!sed的指令真好用,且還支援正規表示法,因此需要較進階的用法,也可自行再谷哥一下囉!
梅問題-[MAC]sed指令大量的取代文字字串