除了使用文字編輯器改變 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 請參考 – https://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 請參考 – https://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 + sed 指令來處理目錄內所有的檔案.
[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’ 來處理 , {} 表示之前的結果 , \; 結束.
沒有解決問題,試試搜尋本站其他內容