前言:
實際工做中遇到一個問題:須要在某一個文件下,將全部包含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 表示輸出匹配的文件名