mac下如何使用Sed批量替換文件夾下的字符串

前言:
實際工做中遇到一個問題:須要在某一個文件下,將全部包含aaa字符串所有替換爲bbb字符串。以前處理這種方式是用vim打開各個文件,進行編輯並批量替換。此次想用一個更方便的方法來實現,想到了sed命令。linux

實現用過過程當中遇到了問題:vim

sed -i 「s/aaa/111/g」 test.txt

這條語句在linux平臺下能夠正常運行。可是在mac下運行會報錯。
以下:spa

➜  practice sed -i "s/aaa/bbb/g"  test.txt
sed: 1: "test.txt": undefined label 'est.txt'

查看sed命令:code

man sed
............

     -i extension
             Edit files in-place, saving backups with the specified extension.  If a zero-length extension is given, no backup will be saved.  It is not recom-
             mended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is
             exhausted, etc.

從上面的解釋可得出,-i 須要而且必須帶一個字符串,用來備份源文件,而且這個字符串將會加在源文件名後面,構成備份文件名。
因此在mac下正確使用方式是這樣的:ci

➜  practice sed -i ""  "s/aaa/bbb/g"  test.txt
➜  practice

另外,若是不想用-i參數,那麼用以下的方法也能夠實現字符串

➜  practice sed   "s/bbb/aaa/g"  test.txt  > test2.txt
➜  practice mv test2.txt test.txt
➜  practice

sed -i 的問題解決了,接下來就是實現某個文件夾的批量替換,實現的代碼以下:it

在當前目錄下,將全部aaaModule都替換爲bbbName
grep -rl 'aaaModule' ./  | xargs sed -i "" "s/aaaModule/bbbName/g"

-r 表示搜索子目錄
-l 表示輸出匹配的文件名
相關文章
相關標籤/搜索