在 中ed
,可以使用 检索命令的输出到当前缓冲区中r !COMMAND
。还可以使用 向命令的输入写入一组行1,3w !COMMAND
。
但是,我无法确定如何同时进行这两件事。
r 1,3w !sort
1,3w !sort: No such file or directory
可以在 中执行此操作吗ed
?
答案1
我发现做到这一点的唯一方法需要使用外部文件来临时存储结果。
$ cat input.txt
13
5
29
22
45
64
17
20
69
91
$ ed input.txt
29
1,3w !sort -n > temp.txt
8
1,3d
0r temp.txt
8
wq
29
答案2
如何同时做这两件事
您无法一次性将文本缓冲区中的行写入某个命令stdin
并将其读回,从而替换原始行。显然不是为了做那种事情而设计的......尝试一下。 话虽如此,您始终可以使用像inside这样的一些扭曲,例如打开文件,从文本缓冲区中删除这些行,通过另一个调用(从原始文件而不是当前缓冲区读取)处理它们,然后将其输出读入原始行范围之前的缓冲区:
stdout
ed
vim
ed
ed
ed
ed -s 输入文件
5,8d
4r ! ed -s infile<<<$'5,8w !sort -n\nq'
,p
q