我在想如何用其他文件中的行替换文件的一部分 - 比如说从 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
退出