web-dev-qa-db-ja.com

edの外部コマンドを使用して一連の行をフィルタリングすることは可能ですか?

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

ただし、両方を同時に行う方法を決定することはできません。

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

これをedで行うことは可能ですか?

1
merlin2011

両方を同時に行う方法

テキストバッファからコマンドstdinに行を書き込んで、そのstdoutを読み戻し、元の行を一度に置き換えることはできません。
edは明らかにそのようなことをするようには設計されていません...vimを試してください。
そうは言っても、ed内でedのようないくつかのゆがみをいつでも使用できます。ファイルを開き、テキストバッファーからそれらの行を削除し、別のed呼び出し(現在のバッファーからではなく元のファイルから読み取る)を介してそれらを処理し、その出力を元の行範囲の前にバッファーに読み込みます。 :

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

これを行うために私が見つけた唯一の方法は、結果を一時的に保存するために外部ファイルを使用することを必要とします。

$ 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
0
merlin2011