类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 在 (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 等。

相关内容