ed
では、r !COMMAND
を使用して、コマンドの出力を現在のバッファーに取得できます。 1,3w !COMMAND
を使用して、コマンドの入力に一連の行を書き込むこともできます。
ただし、両方を同時に行う方法を決定することはできません。
r 1,3w !sort
1,3w !sort: No such file or directory
これをed
で行うことは可能ですか?
両方を同時に行う方法
テキストバッファからコマンドstdin
に行を書き込んで、そのstdout
を読み戻し、元の行を一度に置き換えることはできません。ed
は明らかにそのようなことをするようには設計されていません...vim
を試してください。
そうは言っても、ed
内でed
のようないくつかのゆがみをいつでも使用できます。ファイルを開き、テキストバッファーからそれらの行を削除し、別のed
呼び出し(現在のバッファーからではなく元のファイルから読み取る)を介してそれらを処理し、その出力を元の行範囲の前にバッファーに読み込みます。 :
ed -s infile
5,8d
4r ! ed -s infile<<<$'5,8w !sort -n\nq'
,p
q
これを行うために私が見つけた唯一の方法は、結果を一時的に保存するために外部ファイルを使用することを必要とします。
$ 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