我正在嘗試做一件非常簡單的事情。我有 40 個文字文件,需要刪除其中的所有內容並替換為模板文字檔案的內容。
最簡單/最快的方法是什麼?
注意:我不想搜尋和替換,而是刪除所有內容,然後複製到裡面。這就像打開文件,ctrl + A >> del >> ctrl + v 對於每個文件
答案1
類別Unix
在類 Unix 命令列(Linux、OSX 等)上,您可以使用cat
它將文件內容列印到 STDOUT,並將>
STDOUT 重新導向到文件,覆蓋其內容。
cat template.txt > file.txt
最簡單的方法是放在template.txt
一個單獨的目錄中,然後您可以使用 for 迴圈來影響工作目錄中的每個 *.txt:
for f in ./*.txt; do cat /path/to/template.txt > "$f"; done
在 bash 4+ 的系統上(任何現代的 *nix 都可能有這個;檢查bash --version
),您可以使用擴展的通配符,這樣您就可以將template.txt
其與您想要覆蓋的文件放在同一目錄中:
shopt -s extglob
for f in ./!(*template).txt; do cat template.txt > "$f"; done
如果您的許多子目錄中有文字檔案(警告:這將覆蓋全部 *.txt
工作目錄及其所有子目錄中的文件及其所有子目錄...),您可以使用 globstar:
shopt -s globstar
for f in ./**/*.txt; do cat /path/to/template.txt > "$f"; done
## OR:
shopt -s globstar extglob
for f in ./**/!(*template).txt; do cat template.txt > "$f"; done
視窗
儘管語法不同,但其工作原理類似。而不是cat
使用type
:
type template.txt > file.txt
要處理.txt
目錄中的每個內容:
FOR %F IN (*.txt) DO type C:\path\to\template.txt > %F
對於遞歸性,請使用/R
:
FOR /R %F IN (*.txt) DO type C:\path\to\template.txt > %F
答案2
好吧,您想要的可以透過自動搜尋和替換來完成(就像 powergrep 所做的那樣,但免費),但更容易採用模板並將其複製為每個新檔案。這可以從命令列完成。
建立一個文件,其中包含要放入該範本的所有文件名稱的清單。
所以listoffiles.txt有內容:
文件1.txt
檔案2.txt
檔案3.txt
然後打開 cmd 提示符號並執行以下操作:
C:\fdf>for /f %f in (listoffiles.txt) do @echo copy template.txt %f
複製範本.txt 檔案1.txt
複製範本.txt 檔案2.txt
複製範本.txt 檔案3.txtC:\fdf>
只需更改 @echo copy template.txt 行即可讀取 copy template.txt。即刪除@echo 或僅刪除echo。
您還需要 c:\fdf 中的 listofiles.txt 和其中的 template.txt 。它將創建 file1.txt file2.txt 等。