用另一个文件替换特定行号之间的文件内容的最有效方法是什么?
以下是一个示例:
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