![sed 命令将一个文件中的字符串替换为另一个文件的全部内容](https://linux22.com/image/5409/sed%20%E5%91%BD%E4%BB%A4%E5%B0%86%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%9B%BF%E6%8D%A2%E4%B8%BA%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E5%85%A8%E9%83%A8%E5%86%85%E5%AE%B9.png)
我想编写一个 sed (或 awk)命令来将一个文件中的字符串替换为另一个文件的全部内容。请注意,我想要从中获取内容的第二个文件有多于一行。我试过这个:
sed -e "s/PLACEHOLDER/$(sed 's:/:\\/:g' TestOutput.txt)/" SQLInput.txt
但有一个错误说sed: -e expression #1, char 22: unterminated 's' command
答案1
尝试
sed -i '/PLACEHOLDER/ r TestOutput.txt' SQLInput.txt
在哪里
-i
就地编辑/PLACEHOLDER/
搜索模式r TestOutput.txt
读取文件
注意, /PLACEHOLDER/
没有被删除。
将其删除
sed -i -e '/PLACEHOLDER/ r TestOutput.txt' -e s/PLACEHOLDER// SQLInput.txt
在哪里
-e /PLACEHOLDER/d
将使用 PLACEHOLDER 删除整行-e s/PLACEHOLDER//
将删除 PLACEHOLDER 字符串
答案2
在这种情况下,sed 代码更简单,但由于这个问题还有一个 awk 标签:
awk 'function readfile (file) { getline var < file ; return var }
BEGIN { RS="^$" }; gsub(/PLACEHOLDER/,readfile("TestOutput.txt"))
' SQLInput.txt