我有许多扩展名为.com
的文件,因此这些文件的名称为001.com
,002.com
,003.com
,依此类推。
我还有一个名为headname
的文件,其中包含以下信息:
abc=chd
dha=djj
cjas=FILENAME.chk
dhdh=hsd
我需要将文件头号的信息放在文件001.com
,002.com
,003.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
等等......
答案 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