用另一个文件中的行替换一个文件中的行

用另一个文件中的行替换一个文件中的行

我在想如何用其他文件中的行替换文件的一部分 - 比如说从 m 到 n 的行,并以一种很好的方式执行此操作。

然而,我不想使用编辑器,因为这部分将是更大的事情中的一小部分。

答案1

要将 file1 中的第 3 到 5 行替换为 file2 中的第 3 到 5 行:

ed -s file1 <<< $'3,5d\n2r !sed -n 3,5p file2\nwq'

为了获得更大的灵活性:

start=3 end=5
printf '%d,%dd\n%dr !sed -n %d,%dp file2\nwq\n' $start $end $((start - 1)) $start $end | \
  ed -s file1

这两种方法实现相同的目标:使用 file2 中的行对 file1 进行脚本化编辑。

ed 命令是:

  • 3,5d-- 删除第 3 行到第 5 行
  • 2r !sed...-- 获取 sed 命令的输出并将其附加到行后2
  • sed -n 3,5p file2--p仅打印 file2 中的第 3 行到第 5 行
  • wq--w将文件写回磁盘并q退出

相关内容