Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将字符串添加到bash文件夹中每个文件的开头?_Linux_Bash_File_Shell - Fatal编程技术网

Linux 如何将字符串添加到bash文件夹中每个文件的开头?

Linux 如何将字符串添加到bash文件夹中每个文件的开头?,linux,bash,file,shell,Linux,Bash,File,Shell,我希望能够在文件夹中每个文本文件的开头添加一个字符串。如何在Linux上使用bash实现这一点?这样就可以了。如果对每个文件执行相同的文本,则可以提高效率 for f in *; do echo "whatever" > tmpfile cat $f >> tmpfile mv tmpfile $f done 这应该能奏效 FOLDER='path/to/your/folder' TEXT='Text to prepend' cd $FOLDER for i i

我希望能够在文件夹中每个文本文件的开头添加一个字符串。如何在Linux上使用bash实现这一点?

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

for f in *; do 
  echo "whatever" > tmpfile
  cat $f >> tmpfile
  mv tmpfile $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
用于f in*;做
cat临时文件
mv tempfile$f
完成

它与第1篇文章没有太大区别,但它确实展示了如何将“echo”语句的输出作为一个文件处理,而不必创建临时文件来存储值。

您也可以使用sed in1单个命令来实现这一点

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

您可以这样做,而无需循环和
cat

sed -i '1i whatever' *
如果要备份文件,请使用-i.bak

或使用
awk

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

如果愿意,您可以使用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
一行:
rename''string.*
以下是一个示例:

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

两个
$f
都应该是
“$f”
。也可以做一些错误检查。此外,它还会更改原始文件的权限和所有权。这是对
ls
示例的无用使用。使用shell扩展。您的sed命令似乎只在我想格式化但不知道如何格式化的第一个文件前加上字符串。从这里开始:当您键入答案或问题时,请参阅右栏,这里有格式化帮助