sed 命令将一个文件中的字符串替换为另一个文件的全部内容

sed 命令将一个文件中的字符串替换为另一个文件的全部内容

我想编写一个 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

相关内容