我正在尝试做一件非常简单的事情。我有 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 在 (listoffiles.txt) 中执行@echo copy template.txt %f
复制模板.txt 文件 1.txt
复制模板.txt 文件 2.txt
复制模板.txt 文件 3.txt目录:\fdf>
只需将@echo copy template.txt 行更改为 copy template.txt。即删除@echo 或仅删除 echo。
您还需要 c:\fdf 中的 listoffiles.txt 和 template.txt。它将创建 file1.txt file2.txt 等。