Linux 将文件中的字符串替换为其他文件中的字符串,每个字符串在其他文件中替换一次

Linux 将文件中的字符串替换为其他文件中的字符串,每个字符串在其他文件中替换一次,linux,shell,Linux,Shell,我有两个文件。其中一个是字母文件,其中包含单词NAME,我想用另一个文件的内容替换它。另一个文件包含名称列表 例如,字母文件是 谢谢你的名字,再见 文件名中的名称列表为 标记 迈克尔 乔恩 ... 我想要没有更改的原始信件文件,我想要生成带有更改的原始信件的副本,例如,letter1包含感谢标记,bye Mark和letter2感谢Micheal,bye Micheal等等 如何使用Linux shell脚本实现这一点? 这是我的密码 ((i=1;i letter1.txt)的 完成 ca

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

例如,字母文件是

谢谢你的名字,再见
文件名中的名称列表为

标记
迈克尔
乔恩
...
我想要没有更改的原始信件文件,我想要生成带有更改的原始信件的副本,例如,letter1包含
感谢标记,bye Mark
letter2感谢Micheal,bye Micheal
等等

如何使用Linux shell脚本实现这一点? 这是我的密码

((i=1;i letter1.txt)的

完成

cat names | wc-l
不起作用,并且
sed's/NAME/names/g'letter.txt>letter1.txt
NAME
替换单词
NAME
,而不是文件名的内容。另外,我不知道如何创建多个letter文件副本。

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

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

cat names | while read -r name; do
   sed 's/NAME/'"$name"'/g' letter.txt > letter."$name".txt
done
这将创建名为
letter.Mark.txt
letter.Michael.txt
a.s.o.的文件

如果必须根据
$i
中的已知编号设置文件,请在循环中为变量分配:

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

(可能有点慢,但它能工作)

目前,这只是你想要的一个要求。一个更好的问题是a)更具体(例如,输出是否应该分别转到不同的文件?)和b)显示你自己的努力和失败的地方。此外,可能是“Michael”。是的,我想要原始的信件文件,但需要更改,我想生成带有更改的原始信函的副本,例如,信函1包含“感谢标记,再见标记”和信函2“感谢Micheal,再见Micheal”。您可能想回答问题。感谢Benjamin W的评论。如果我将第二个解决方案放入for循环中,我会编辑问题,正如我之前所说的,
猫名| wc-l
不起作用。如何使其工作?
$(猫名| wc-l)
但我不建议使用第一种解决方案和计数器
I=$((I+1))
。我非常感谢您的帮助。