簡體   English   中英

如何從命令行進行遞歸查找和替換?

[英]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
  • 過濾文件名如:include -f "\\.(xml|java|cpp)$" ,exclude --nf "\\.(so|a|lib|dll|obj)$"
  • 過濾目錄名稱如:include -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/msrmsr.exe / msr.gcc* / msr.cygwin是在tools目錄)。 內置使用和exmaples只需運行exe。 Docs findstrgrep的性能比較

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM