web-dev-qa-db-ja.com

ed次のn行をできるだけ簡潔に印刷します

ed DSLのバージョンが他のツール(例:sedvim)に表示されるため、DSLをもう少しよく理解しようとしています。

edを使用すると、.,+4nを使用して次の4行を印刷できます。ここで、.,+4は、現在の行から始まり、4行下に伸びる明示的な範囲です。

ただし、コンテキストのために現在の行の周囲に数行を印刷することは、構文上の糖衣構文に値するほど重要であるように思われます。

edの現在の行を基準にした行範囲の省略形はすでにありますか?

例えば以下のトランスクリプトでは、.,+4nはかなり長いようです。

$ touch ~/foo
$ ed '-p* ' ~/foo
0
* 0a
1
2
3
4
5
6
7
8
9
10
11
.
* 5
5
* .,+4n
5   5
6   6
7   7
8   8
9   9
4
Gregory Nisbet

-4,+4nは、前の4行、現在の行、および次の4行(番号付き)を出力します。

同じことを書くもう1つの方法は、少し短いですが、-4z8nです。これはzコマンドを適用します。これはpとは異なり、最初にアドレス指定された行(ここでは-4)に移動し、次にその行と(ここでは)8以上の行を表示します。 nは、行に番号を付けます。本当の違いは、コマンドznagain(現在は数字なし)を指定すると、が表示されることです。 next8行(または最初のzコマンドの後に入力した数値)。

どちらのコマンドも「現在の行」と見なされるものを変更するため、手動で-4を使用して戻るか、移動する前にマークを設定してから(kaなど)、そのマークに戻る必要があります('aなど)。残念ながら、edエディターは、一度に複数のコマンドを実行することはできません。

zコマンドは 標準のed コマンドではありませんが、BSDシステムではGNU ededの両方でサポートされていることに注意してください。

exを使用すると、コマンド.z.5は、現在の行が中央にある現在のバッファーの5行を表示します。ここでも、最後に表示された行にカーソルを移動します。

3
Kusalananda