bash 脚本中的 sed 变量返回未终止的错误

bash 脚本中的 sed 变量返回未终止的错误

我需要用另一个文件的完整内容替换文件的第一行。看到我错过了什么吗?

$ cat old.txt
---
foo
bar

$ cat append.txt
---
123
<321>

$ cat process.sh
old=old.txt
append=append.txt
sed -i "1s/.*/$append/" $old
cat $old

我预计

$ bash process.sh
---
123
<321>
foo
bar

虽然我得到了

sed: -e expression #1, char 9: unterminated `s' command

当尝试在我的脚本中使用变量进行 sed 时

虽然这个有效(没有变量) sed -i "1s/.*/loremipsum/" $old

答案1

要将第一行替换old.txt为 的内容append.txt

$ sed -e '1{ r append.txt' -e 'd;}' old.txt
---
123
<321>
foo
bar

-i在第一个之前添加-e以在 中进行就地编辑old.txt

sed这将在给定文件上运行以下简短脚本:

1{                 # we're on the first line
    r append.txt   # read in the whole of the append.txt file
    d;             # delete the current line
}
                   # (implicit print)

在命令行上,它被分为两个单独的-e表达式字符串,因为与命令一起使用的文件名r必须以换行符(或当前表达式字符串的末尾)终止。

相关内容