É possível filtrar um conjunto de linhas através de um comando externo no ed?

1

Em ed , pode-se recuperar a saída de um comando no buffer atual usando r !COMMAND . Pode-se também escrever um conjunto de linhas para a entrada de um comando usando 1,3w !COMMAND .

No entanto, não consigo determinar como fazer as duas coisas simultaneamente.

r 1,3w !sort
1,3w !sort: No such file or directory

É possível fazer isso em ed ?

    
por merlin2011 18.05.2018 / 19:47

2 respostas

1

how to do both simultaneously

Você não pode escrever linhas do buffer de texto para algum comando stdin e ler seu stdout de volta, substituindo as linhas originais, de uma só vez.
ed claramente não foi projetado para fazer isso tipo de coisa ... Tente vim .
Dito isso, você sempre pode usar algumas contorções como ed dentro de ed , por exemplo, abra o arquivo, exclua essas linhas do buffer de texto, processe-as por meio de outra invocação de ed (que lê do arquivo original e não do buffer atual) cuja saída você leu no buffer antes do intervalo original de linhas:     

ed -s infile
5,8d
4r ! ed -s infile<<<$'5,8w !sort -n\nq'
,p
q
    
por 19.05.2018 / 01:03
0

A única maneira que eu encontrei para fazer isso requer o uso de um arquivo externo para armazenar os resultados temporariamente.

$ 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
    
por 18.05.2018 / 20:00

Tags