次のコマンドは、必要なことを行う必要があります。
%s/^\d\{3} \zs9/
これは、電話番号が指定した正確な形式である場合にのみ機能することに注意してください。正規表現は非常に具体的で、ファイル内の他のものを台無しにする可能性が少し低くなります。
問題があるとおっしゃっていたので、この正規表現で何が起こっているのかを説明します。これを使用することに決めなくても、少なくとも少しは学べます。
%s
「すべての行で置換を行う」ことを意味します。これは実際には正規表現の一部ではありません。標準の vim コマンドです。
^
はアンカーであり、「これは行の開始位置でなければならない」という意味です。つまり、「行の次の内容の前には何も置かないでください」という意味です。
\d\{3}
は、「ここには正確に 3 桁でなければならない」という意味です。これは、行の最初の 3 文字が数字でなければならないことを意味します。
(スペース) は、次にリテラル スペースが必要であることを意味します。図に行きます。
\zs
「実際にここで試合を開始する」という意味です。前のものは一致する必要がありますが、前のものを「選択」しないでください。
9
次のリテラルが必要であることを意味し9
ます。これはあなたが一致するものです。
/
、最後の文字は、「次のすべてが一致を置き換える必要があるものです」を意味します。後に何も続かないので、「一致を何も置き換えない」ことを意味します。
終わり!
編集:
どうやら、問題のデータ ファイルには、最初の数字グループと 2 番目の数字グループの間にスペースが 1 つだけ含まれていませんでした。これを考慮して、空白の一致に影響する正規表現の部分を変更します。
したがって、正規表現のスペースは、\s\+
「任意の空白文字に 1 回以上一致する」ことを意味する に置き換える必要があります。したがって、正規表現は次のようになります。
%s/^\d\{3}\s\+\zs9/