是否可以通过 ed 中的外部命令过滤一组行?

是否可以通过 ed 中的外部命令过滤一组行?

在 中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
edvim
ededed

ed -s 输入文件

5,8d
4r ! ed -s infile<<<$'5,8w !sort -n\nq'
,p
q

相关内容