類別Unix

類別Unix

我正在嘗試做一件非常簡單的事情。我有 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.txt

C:\fdf>

只需更改 @echo copy template.txt 行即可讀取 copy template.txt。即刪除@echo 或僅刪除echo。

您還需要 c:\fdf 中的 listofiles.txt 和其中的 template.txt 。它將創建 file1.txt file2.txt 等。

相關內容