Linux – 取代文字檔案內字串

除了使用文字編輯器改變 TEXT (.txt) 文字檔案內容外,我們可以透過 sed 指令來處理.

先來產生一個文字檔.

[root@localhost ~]# echo 'Hi Ben' > test.txt
[root@localhost ~]# cat test.txt 
Hi Ben

透過 sed 的 s/regexp/replacement/ , 符合 regexp (正規表示式) 的字串會取代 replacement 字串,但同一行有多個符合 regexp 時只會取代第一個符合的字串.如果要全部取代需要在最後面加入參數 g. s/regexp/replacement/g , 更多關於 sed 請參考 – http://benjr.tw/97129

單一檔案

[root@localhost ~]# cat test.txt | sed 's/Ben/Bob/g'
Hi Bob
[root@localhost ~]# sed -i 's/Ben/Bob/g' test.txt 
[root@localhost ~]# cat test.txt 
Hi Bob

目錄下所有檔案

如果是整個目錄下的檔案需要同步做修改時可以透過 find 一併使用.

先來產生2 個文字檔.

[root@localhost ~]# mkdir test
[root@localhost ~]# cd test
[root@localhost test]# echo 'Hi Ben' > test1.txt
[root@localhost test]# cat test1.txt 
[root@localhost test]# echo 'Hi Ben' > test2.txt
[root@localhost test]# cat test2.txt 
Hi Ben

先查出哪些檔案符合取代條件.
更多關於 find 請參考 – http://benjr.tw/95124

-print True; print the full file name on the standard output,

[root@localhost test]# find ./ -type f -exec grep 'Ben' {} \; -print
Hi Ben
./test1.txt
Hi Ben
./test2.txt

或是

[root@localhost test]# find ./ -type f -print -exec grep 'Ben' {} \; 
Hi Ben
./test1.txt
Hi Ben
./test2.txt

一樣是透過 find 指令來處理目錄內所有的檔案.

[root@localhost test]# find ./ -type f -exec sed -i 's/Ben/Bob/g' {} \;
[root@localhost test]# cat test1.txt test2.txt 
Hi Bob
Hi Bob
  • ./
    指定為當前路徑.
  • -type f
    找出屬性為檔案 f (file) 來尋找.
  • -exec
    參數 -exec 將之前的結果轉向 sed -i ‘s/Ben/Bob/g’ 來處理 , {} 表示之前的結果 , \; 結束.
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料