使用 BASH 将特定行号之间的文件内容替换为另一个文件

使用 BASH 将特定行号之间的文件内容替换为另一个文件

用另一个文件替换特定行号之间的文件内容的最有效方法是什么?

以下是一个示例:

main.txt

a b c
d e f
g h i
j k l

new.part.txt

x y z
p q r
s t u

从第 2 行开始到第 3 行结束的文本块main.txt被替换为new.part.txt。所需文件如下:

a b c
x y z
p q r
s t u
j k l

这个答案适用于通过标记字符串定义所需块的范围的情况。我需要一个使用行号来定义所需块的范围的解决方案。

答案1

您根本不使用 bash。

Bourne Again shell 是一个 shell。实际执行此操作的实用程序不是 shell 的一部分,并且很大程度上与 shell 无关。 grawity的答案使用了 shell 功能,但主要用于参数化。

使用 进行以下操作的方法ex,即就地编辑文件:

ex main.txt << EOT
2,3d
1r new.part.txt
w
EOT

以下是使用 执行此操作的方法sed,将更改的数据写入标准输出:

sed -e '1r new.part.txt' -e '2,3d' main.txt

答案2

start=2
end=3

{
  head -n $((start-1)) old.txt
  cat new.txt
  tail -n $((end+1)) old.txt
} > merged.txt

相关内容