Bash Sed插入文件内容而不是文件名

Bash Sed插入文件内容而不是文件名,bash,sed,replace,Bash,Sed,Replace,我有两个文件,希望将一个文件的内容插入另一个文件,替换指定的行 文件1: abc def ghi jkl 文件2: 123 以下代码就是我的代码。 file1=numbers.txt file2=letters.txt linenumber=3s echo $file1 echo $file2 sed "$linenumber/.*/r $file1/" $file2 这将导致输出: abc def r numbers.txt jkl abc def 123 jkl 我希望的结果是:

我有两个文件,希望将一个文件的内容插入另一个文件,替换指定的行

文件1:

abc
def
ghi
jkl
文件2:

123
以下代码就是我的代码。

file1=numbers.txt
file2=letters.txt
linenumber=3s
echo $file1
echo $file2
sed "$linenumber/.*/r $file1/" $file2
这将导致输出:

abc
def
r numbers.txt
jkl
abc
def
123
jkl
我希望的结果是:

abc
def
r numbers.txt
jkl
abc
def
123
jkl
我认为这可能是bash变量的问题,但当我手动输入信息时,仍然会得到相同的输出


如何理解sed和/或read命令?

我将使用
c
命令,如下所示:

linenumber=3
sed "${linenumber}c $(< $file1)" "$file2"

你不能那样使用
r
r
必须是正在运行的命令。

脚本将该行替换为字符串
“r$file1”
s
命令中的
sed
部分不会重新解释为命令,而是按字面意思理解

你可以:

linenumber=3
sed "$linenumber"' { 
        r '"$file1"'
        d
}' "$file2"
读取第3行,打印文件1,然后删除该行

请参阅,以获得良好的解释和参考

当然,我们可以让这成为一条单行线:

sed -e "$linenumber"' { r '"$file2"$'\n''d; }' "$file1"

生活实例在。

为什么
s
在行号中?@KamilCuk如果我正确理解sed,那么“s”不代表替换?我试图用文件2的内容替换/替换第3行。谢谢,但当我运行代码时,它只会导致
abc def ghi jkl
Och,我想我把文件1和文件2混合在一起了,尝试交换它们当我交换它们时,它会变为
123
它在教程点上运行得很好,但在我的终端上仍然不起作用。我正在运行Ubuntu18.04,已经重新安装了sed,但没有用。有什么想法吗?:/我能猜到:编码。尝试在文件上运行
dos2unix
。可能会发布这些文件的
cat file | hextump-C
的输出?通常sed很难处理DOS换行。谢谢您的帮助,但我收到了
123
啊,您的
linenumber
可能仍然设置为
3s
。我已经添加了如何设置它。