在Linux中,在sed命令内执行cat命令

13

我有一个包含一些内容的 file.txt 文件。我想在 file1.txt 文件中搜索字符串,如果匹配成功,我想将该字符串替换为 file.txt 的内容。我该如何实现?

我尝试使用 sed

sed -e 's/%d/cat file.txt/g' file1.txt

这是在file1.txt中搜索匹配的字符串并将其替换为字符串cat file.txt,但我想要的是file.txt中的内容。


2
问题到底是什么? - user2286078
@amar,你能否在你的问题中指定或给出一个例子,以便读者更好地理解它。 - Nitin4873
file.txt 包含一行还是多行?文件中的换行符应保留还是可以被视为单行,并将换行符替换为空格? - Jonathan Leffler
4个回答

6

在将文件插入sed字符串之前,将文件内容保存在变量中如何?

$content=`cat file.txt`; sed "s/%d/${content}/g file1.txt"

5
你可以使用命令:sed "s/%d/$(cat file.txt)/g" file1.txt,也可以完成相同的任务。 - uzsolt
@uzsolt 是的,但我更喜欢使用变量,因为它们更易读。 - Ivan Kolmychek
@amar 如果你找到另一种解决方案,请添加一个答案,这样其他人就可以看到已经有答案了,不浪费他们的时间,如果他们想回答或者看看是否有相同的问题。 - Ivan Kolmychek
2
你需要使用 content=$(cat file.txt); sed ...,但是如果文件中包含 /& 或其他一些字符序列,则此方法将无法正常工作。 - Kevin
sed -e 's/%d/'$a'/g' amar.htm解决了我的问题,amar.htm中有字符串“%d”,需要进行搜索,“a”中包含要替换的字符串。 - amar

3

给定内容为original.txt的文件:

this is some text that needs replacement

并将replacement.txt替换为以下内容:

no changes

我不确定你的替换标准是什么,但是假设我想要在原始文件中替换所有出现的单词replacement,你可以使用以下方法将原始文本的内容替换为另一个文件的内容:

> sed -e 's/replacement/'"`cat replacement.txt`"'/g' original.txt
this is some text that needs no changes

2
您可以使用r命令使用sed读取文件。但是,这是基于行的操作,可能不是您想要的。
sed '/%d/r file1.txt'

读取发生在“每行”循环的末尾。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接