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

时间:2011-04-26 21:21:28

标签: linux bash file shell

我希望能够将字符串添加到文件夹中每个文本文件的开头。如何在Linux上使用bash执行此操作?

9 个答案:

答案 0 :(得分:30)

这样就可以了。如果您对每个文件执行相同的文本,则可以提高效率...

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

答案 1 :(得分:19)

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

sed -i '1i whatever' *

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

或使用awk

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

答案 2 :(得分:5)

你可以在 1单一命令中使用sed来执行此操作

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

答案 3 :(得分:0)

这应该可以解决问题。

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

如果您的文件非常大,我不建议这样做。

答案 4 :(得分:0)

您也可以这样做:

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

与第一篇文章没什么不同,但确实展示了如何将'echo'语句的输出视为文件,而不必创建临时文件来存储值。

答案 5 :(得分:0)

如果您愿意,可以使用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

答案 6 :(得分:0)

这是我做过的最简单的事情。

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

答案 7 :(得分:0)

这里是一个例子:

for f in *; 
do
    mv "$f" "whatever_$f"
done

答案 8 :(得分:-1)

单线:package com.piinfo.config;