vi エディタで複数行の単語を置き換えるにはどうすればよいでしょうか?

vi エディタで複数行の単語を置き換えるにはどうすればよいでしょうか?

たとえば、vi エディターで、today という単語が 8 行含まれたファイルが作成されますが、once コマンドを使用して 4 行を yesterday という単語に変更するにはどうすればよいでしょうか。

答え1

ファイルの内容に作用するほとんどの ex コマンド (つまり、:(コロン) を押してからコマンド名を押すことで呼び出されるコマンド) では、コマンドの前に範囲を指定できます。この範囲は、コマンドによって影響を受ける行を指定します。範囲の一般的な形式は、コンマで区切られた 2 つの数値であり、コマンドは最初の数値から 2 番目の数値までのすべての行に作用します。たとえば、

1,4s/today/yesterday/g

ファイルの最初の 4 行にtodayある のすべての出現を に置き換えます。yesterday

数字の前に符号を付けると、現在の行からの相対値になります。例えば

-1,+1s/today/yesterday/g

前の行、現在の行、次の行で置換を実行します。カンマを含めて数字の1つを省略すると、現在の行を意味します。例:

,+1s/today/yesterday/g

は、現在の行と次の行で置換を実行します。$ファイルの最後の行を意味する数字の代わりに を使用することもできます。カンマを省略して数字を1つだけ指定した場合、コマンドはこの行のみに作用します。例:

+1s/today/yesterday/g

次の行のみ置換を実行します。

答え2

次のコマンドを使用できます:

:n,m s/today/yesterday/

つまり、n 行目から m 行目まで、「今日」という単語を「昨日」に置き換えます。

答え3

これを試して :

vi エディターのコマンド モードに移動し、以下のコマンドを試してください。

:%s/today/yesterday/g

g - 今日を昨日に全体的に置き換えます。

関連情報