我的目录中有一堆文本(数百个 txt)。它们每个都有一个唯一的文件名。我想将每个文件的文件名插入到各个文件的第一行。我怎样才能使用 bash 脚本做到这一点?
答案1
标准方法是使用临时文件,但如果将文件括cat
在$()
括号中,则可以就地更改文件:
for file in *.txt; do echo "$file"$'\n'"$(cat -- "$file")" > "$file"; done
答案2
您可以使用标准文本编辑器:
for f in *; do printf '%s\n' 1i "$f" . w q | ed "$f"; done
答案3
for file in *; do
(echo "$file"; cat -- "$file") > "$file.new"
mv -- "$file.new" "$file"
done
此循环遍历所有文件,回显每个文件名并附加文件的内容,然后将其全部放入带有附加后缀.new
.
您为每个现有文件创建一个新文件,因此之后必须重命名这些文件。
您可以将结果放入新目录,然后删除旧目录:
mkdir new
for file in *; do
(echo "$file"; cat "$file") > "new/$file"
done
您还可以使用带有选项的 sed-i
对文件进行就地编辑。 Perl 也允许这样做。这完全取决于您还有哪些其他可用工具。 :)