助け合いフォーラム
LPIC Lv1-101(Ver5.0)
問題ID : 3134
問題を開く
viエディタで編集しているファイルにある「ping-t」という文字列を、全て「hoge」に置換したい。適切なコマンドは次のうちどれか。
正解
:%s/ping-t/hoge/g
解説
ファイル全体の文字列を置換するには、コマンドモードで以下のようなviコマンドを実行します。
:%s/文字列1/文字列2/g
したがって正解は
・:%s/ping-t/hoge/g
です。
「%」はファイル全体の行、「s」は置換、「g」は範囲内の全ての文字列1を置換対象とするという意味になります。
なお、「:%s/文字列1/文字列2/」のように「g」を付加しないと、各行の最初に見つかった文字列1のみが置換対象となります。
その他の選択肢については以下のとおりです。
・:%s/ping-t/hoge/
各行の最初に見つかった「ping-t」という文字列のみ置換しますので、誤りです。
・:/ping-t/hoge/g
・:/ping-t/hoge/
・:'s/ping-t/hoge/g'
書式が誤っています。
:%s/文字列1/文字列2/g
したがって正解は
・:%s/ping-t/hoge/g
です。
「%」はファイル全体の行、「s」は置換、「g」は範囲内の全ての文字列1を置換対象とするという意味になります。
なお、「:%s/文字列1/文字列2/」のように「g」を付加しないと、各行の最初に見つかった文字列1のみが置換対象となります。
その他の選択肢については以下のとおりです。
・:%s/ping-t/hoge/
各行の最初に見つかった「ping-t」という文字列のみ置換しますので、誤りです。
・:/ping-t/hoge/g
・:/ping-t/hoge/
・:'s/ping-t/hoge/g'
書式が誤っています。
gをつけなくても全て変換される
y
ymiyake
投稿日 2023/02/08
実機にてgをつけなくても当てはまる全ての文字列が変換されました。
2023/02/08 19:58
1行に複数個、当てはまる文字列があるようなファイルで試してみてください。
解説に
なお、「:%s/文字列1/文字列2/」のように「g」を付加しないと、各行の最初に見つかった文字列1のみが置換対象となります。
とあるように、gをつけない:%s/ping-t/hoge/
では1行につき最初の1回だけしか置換しません。つまり
ping-t1,ping-t2
ping-t3,ping-t4
という内容のファイルの場合、ping-t1はhoge1に、ping-t3はhoge3に置換されますが、ping-t2とping-t4はそのままになります。
問題文に全て「hoge」に置換したい。
とあるので、g がないと不正解となります。
コメント
この投稿に対して返信しませんか?
y ymiyake
2023/02/10 13:36
ご回答ありがとうございます。 gをつけないとファイル全体の各行の最初だけということなんですね 理解できました。