[英]How to do a recursive find and replace from the command line?
是否有一種簡單的方法可以遞歸搜索目錄層次結構中的所有文件(例如port
),並將該術語的所有匹配項替換為另一個(例如port-lookup
)。
我已嘗試過這篇文章中的建議,但它們僅適用於單個文件。
嘗試這個
find ./ -type f -exec sed -i -e 's/port/port-lookup/g' {} \;
如果您不想更改文件修改時間
grep -rl 'port' /search_in_this_dir | xargs sed -i 's/port/port-offset/g'
實現此目的的最簡單(也可以說是最純粹和最直觀)的方法是執行遞歸文件grep
然后將這些文件結果傳遞給sed(通過xargs
)來處理就地替換。
grep -r -l "port" | xargs -r -d'\n' sed -i 's/port/port-lookup/g'
關於這個主題有一個全面的社區wiki答案 ,我建議你閱讀Unix和Linux交換。
如果您有最新版本的bash(> 4)
shopt -s globstar
sed -i 's/port/port-lookup/g' **/*
只需1個命令行: msr -rp dir1,dir2,file1,fileN -x port -o port-lookup -R
上面的命令重復搜索並將純文本port
替換為文件中的port-lookup
。
-R
-l
-K
如-K -R
或-RK
。 -i
如-i -x
或-ix
。 C++
/ C#
/ Java
/ Scala
Regex語法,請使用-t
而不是-x
。 -f "\\.(xml|java|cpp)$"
,exclude --nf "\\.(so|a|lib|dll|obj)$"
-d "src"
,exclude --nd "^(target|\\.git)$"
--s1 1
/ --s1 1B
with /或--s2 1.20MB
--w1 2017-08-01
with /或--w2 "2017-08-12 11:20:30"
關於查找和替換文件或管道更多的用途只是看到我打開的項目https://github.com/qualiu/msr ( msr.exe
/ msr.gcc*
/ msr.cygwin
是在tools
目錄)。 內置使用和exmaples只需運行exe。 Docs 與findstr和grep的性能比較 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.