用另一个文件中包含的数据替换一个文件中的特定行

时间:2019-10-03 22:31:38

标签: linux awk sed

我想用另一个文件(文件2)中包含的数据替换一个文件(文件1)中的特定行。例如: 文件1(输入代码):

 other lines...
 11 !!! Regular Expression
 10 0.685682*100
 11 0.004910*100
 12 0.007012*100
 13 0.146041*100
 14 0.067827*100
 15 0.019460*100
 16 0.019277*100
 17 0.001841*100
 18 0.047950*100
 other lines...

文件2(用于添加新数据):

 1 0.36600*100
 2 0.44466*100
 3 0.0.046*100
 4 0.15544*100
 5 0.16600*100
 6 0.14477*100
 7 0.01927*100
 8 0.00188*100
 9 0.05566*100

如何用文件2(数据)中包含的数据替换从第1行到第n行的输入数据(文件1)。我尝试如下使用sed

sed '/!!! Regular Expresion/r File2' File1

我得到以下信息:

 1 !!! Regular Expression
 2 0.36600*100
 3 0.44466*100
 4 0.0.046*100
 5 0.15544*100
 6 0.16600*100
 7 0.14477*100
 8 0.01927*100
 9 0.00188*100
 10 0.05566*100
 11 0.685682*100
 12 0.004910*100
 13 0.007012*100
 14 0.146041*100
 15 0.067827*100
 16 0.019460*100
 17 0.019277*100
 19 0.001841*100
 20 0.047950*100

我的问题是此命令可以插入文件2中包含的行,但不能替换它们。如何只用新数据替换这些行(从10到18)?

谢谢。

1 个答案:

答案 0 :(得分:0)

  

将一个文件中的特定行从10到18替换为文件2中包含的数据

让我们使用动态编程并将“替换”分为“删除”和“插入”。

  

在10到18个文件中[删除]特定行

这很简单:

sed '10,18d'

会删除10到18行。

  

[插入]文件2中包含的数据[到第10行]

这也很容易:

sed '9r file2'

它将文件2的内容追加到第9行之后,因此文件2的第一行是新行10。

一起:

sed '10,18d; 9r file2'

示例:

# seq 8 | sed '3,6d; 2r '<(seq -f 2%.0f 5)
1
2
21
22
23
24
25
7
8