如何在bash文件夹中的每个文件的开头添加一个string?

我希望能够在文件夹中的每个文本文件的开头添加一个string。 我怎样才能在Linux上使用bash来做到这一点?

Solutions Collecting From Web of "如何在bash文件夹中的每个文件的开头添加一个string?"

这将做到这一点。 如果你对每个文件做同样的文字,你可以使它更有效率。

for f in *; do echo "whatever" > tmpfile cat $f >> tmpfile mv tmpfile $f done 

你可以这样做,没有一个循环和cat

 sed -i '1i whatever' * 

如果要备份文件,请使用-i.bak

或者使用awk

 awk 'FNR==1{$0="whatever\n"$0;}{print $0>FILENAME}' * 

而且你也可以使用sed在1单个命令中执行此操作

 for f in *; do sed -i.bak '1i\ foo-bar ' ${f} done 

这应该做的伎俩。

 FOLDER='path/to/your/folder' TEXT='Text to prepend' cd $FOLDER for i in `ls -1 $FOLDER`; do CONTENTS=`cat $i` echo $TEXT > $i # use echo -n if you want the append to be on the same line echo $CONTENTS >> $i done 

如果你的文件非常大,我不会推荐这样做。

你也可以这样做:

 for f in *; do cat <(echo "someline") $f > tempfile mv tempfile $f done 

这和第一篇文章没什么太大的区别,但是它展示了如何将“echo”语句的输出作为一个文件来处理,而不需要创建一个临时文件来存储这个值。

如果你喜欢,你可以使用ed命令来完成没有临时文件的操作:

 for file in *; do (test ! -f "${file}" || test ! -w "${file}") && continue # sort out non-files and non-writable files if test -s "${file}" && ! grep -Iqs '.*' "${file}"; then continue; fi # sort out binary files printf '\n%s\n\n' "FILE: ${file}" # cf. http://wiki.bash-hackers.org/howto/edit-ed printf '%s\n' H 0a "foobar" . ',p' q | ed -s "${file}" # dry run (just prints to stdout) #printf '%s\n' H 0a "foobar" . wq | ed -s "${file}" # in-place file edit without any backup done | less 

这是我制定的最简单的方法。

sed -i '1s/^/Text添加新file\n/' /file/to/change