我有两个文件,想将一个文件的内容插入另一个文件,替换指定的行。
文件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命令?
答案 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
,您不能这样使用r
。 r
必须是正在运行的命令。