我需要用另一个文件的完整内容替换文件的第一行。看到我错过了什么吗?
$ 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
必须以换行符(或当前表达式字符串的末尾)终止。