edで外部コマンドを介して一連の行をフィルタリングできますか?

edで外部コマンドを介して一連の行をフィルタリングできますか?

では、edコマンドの出力を現在のバッファに取得するために使用できますr !COMMAND。コマンド入力に一連の行を書き込むこともできます1,3w !COMMAND

ただし、これら2つの操作を同時に実行する方法はわかりません。

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

2つを同時に行う方法

テキストバッファ内のコマンドで1行を書き込んでstdin再読み込みして元の行を置き換えることはできません。明らかに、この種のタスクを実行するように設計されていません。一度試してみてください。しかし、ファイルを開き、テキストバッファから行を削除し、別の呼び出しで処理してから(現在のバッファではなく元のファイルから読み取る)、元の読み込み前にバッファを出力するなど、いくつかのバリエーションをいつでも使用できます。ライン範囲: stdout
edvim
ededed

ed -s 入力ファイル

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

関連情報