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

时间:2018-09-26 17:17:05

标签: 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

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

我怎么会误解sed和/或read命令?

2 个答案:

答案 0 :(得分:2)

您的脚本用字符串"r $file1"替换行。 sed命令中s中的部分不会重新解释为命令,而是按字面意义理解。

您可以:

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

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

请参见here,以获取良好的解释和参考。

我们当然可以将它做成一个单线纸:

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

tutorialpoints的生活示例。

答案 1 :(得分:0)

我将按以下方式使用c命令:

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

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


您的命令无效,因为它扩展为:

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

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