使用bash将一个文本添加到多个文件

时间:2016-01-21 15:15:53

标签: bash

我有许多扩展名为.com的文件,因此这些文件的名称为001.com002.com003.com,依此类推。

我还有一个名为headname的文件,其中包含以下信息:

abc=chd
dha=djj
cjas=FILENAME.chk
dhdh=hsd

我需要将文件头号的信息放在文件001.com002.com003.com等内部(以及开头)......但是{{1需要是将收到FILENAME信息的文件的文件名(没有headname扩展名)。

所以输出必须是:

对于.com

001.com

对于abc=chd dha=djj cjas=001.chk dhdh=hsd

002.com

对于abc=chd dha=djj cjas=002.chk dhdh=hsd

003.com

等等......

2 个答案:

答案 0 :(得分:4)

set -e

for f in *.com
do
    cat <(sed "s#^cjas=FILENAME.chk\$#cjas=${f%.com}.chk#" headname) "$f" > "$f.new"
    mv -f "$f.new" "$f"
done

说明:

  • for f in *.com - 这将循环覆盖以.com结尾的所有文件名。
  • sed是一个可用于替换文字的程序。
  • s#...#...#是替代命令。
  • ${f%.com}是没有.com后缀的文件名。
  • cat <(...) "$f" - 这会将新头与.com文件的正文合并。
  • cat的输出存储在名为123.com.new的文件中 - mv -f "$f.new" "$f"用于将123.com.new重命名为123.com

答案 1 :(得分:1)

这样的事情应该有效:

head=$(<headname)        # read head file into variable
head=${head//$'\n'/\\n}  # replace literal newlines with "\n" for sed
for f in *.com; do       # loop over all *.com files
  # make a backup copy of the file (named 001.com.bak etc).
  # insert the contents of $head with FILENAME replaced by the 
  # part of the filename before ".com" at the beginning of the file      
  sed -i.bak "1i${head/FILENAME/${f%.com}}" "$f"
done