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



我有两个文件,想将一个文件的内容插入到另一个文件中,替换指定的行。

文件 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

我认为这可能是 bash 变量的问题,但当我手动输入信息时,我仍然得到相同的输出。

我如何误解 sed 和/或读取命令?

您的脚本将行替换为字符串"r $file1"。命令中seds部分不会重新解释为命令,而是从字面上理解。

您可以:

linenumber=3
sed "$linenumber"' { 
r '"$file1"'
d
}' "$file2"

读取第 3 行,打印文件 1,然后删除该行。

请参阅此处以获取良好的解释和参考。

当然,我们可以将其设为单行:

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

教程点的生活示例。

我会按如下方式使用c命令:

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

这会将当前行替换为c之后的文本。


您的命令不起作用,因为它扩展到以下内容:

sed "3s/.*/r numbers.txt/" letters.txt

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

最新更新