ed
DSLのバージョンが他のツール(例:sed
、vim
)に表示されるため、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,+4n
は、前の4行、現在の行、および次の4行(番号付き)を出力します。
同じことを書くもう1つの方法は、少し短いですが、-4z8n
です。これはz
コマンドを適用します。これはp
とは異なり、最初にアドレス指定された行(ここでは-4
)に移動し、次にその行と(ここでは)8
以上の行を表示します。 n
は、行に番号を付けます。本当の違いは、コマンドzn
again(現在は数字なし)を指定すると、が表示されることです。 next8行(または最初のz
コマンドの後に入力した数値)。
どちらのコマンドも「現在の行」と見なされるものを変更するため、手動で-4
を使用して戻るか、移動する前にマークを設定してから(ka
など)、そのマークに戻る必要があります('a
など)。残念ながら、ed
エディターは、一度に複数のコマンドを実行することはできません。
z
コマンドは 標準のed
コマンドではありませんが、BSDシステムではGNU ed
とed
の両方でサポートされていることに注意してください。
ex
を使用すると、コマンド.z.5
は、現在の行が中央にある現在のバッファーの5行を表示します。ここでも、最後に表示された行にカーソルを移動します。