用其他文件中的字符串替换文件中的字符串,在其他文件

时间:2017-03-06 17:02:33

标签: linux shell

我有两个文件。其中一个是一个字母文件,里面有NAME,我想用另一个文件的内容替换它。另一个文件包含一个名称列表。

例如,字母文件是

 Thanks NAME, bye NAME 

,文件名中的名称列表为

Mark
Micheal
Jon
...

我希望原始的字母文件没有变化,我希望生成带有更改的原始字母的副本,例如letter1包含Thanks Mark, bye Markletter2 Thanks Micheal, bye Micheal等等。

如何使用Linux shell脚本执行此操作? 这是我的代码

for (( i=1 ; i<= cat names | wc -l ; i++ ))

do

sed 's/NAME/names/g' letter.txt > letter1.txt

done

cat names | wc -l无效,sed 's/NAME/names/g' letter.txt > letter1.txtNAME替换为names,而不是文件名的内容。另外我不知道如何创建多个letter文件的副本。

1 个答案:

答案 0 :(得分:0)

我建议您使用该名称作为文件名的补充。

因此在循环中将每个名称读入变量,并将其用于替换。

cat names | while read -r name; do
   sed 's/NAME/'"$name"'/g' letter.txt > letter."$name".txt
done

这将创建名为letter.Mark.txtletter.Michael.txt a.s.o。

的文件

如果您必须根据$i中已知的数字拥有文件,请在循环内为变量分配:

name="$(cat names|head -n "$i"|tail -n1)"

(可能有点慢,但有效)