1

ファイル内の;に置き換えたい.,

Query ; Query Time ; Lock Time ; Rows Examined

Closed User Count ; 19.530083 ; 0.000090 ; 64;49;246

期待される出力:

Query ; Query Time ; Lock Time ; Rows Examined

Closed User Count ; 19.530083 ; 0.000090 ; 64,49,246

置換には vim 置換を使用します。しかし、このシナリオでの交換方法はわかりません。

4

4 に答える 4

4

簡潔な答え:

:%s/(\d*);(\d*);(\d*)$/\1,\2,\3/gc

説明:

%s/search/replace/gc- search のすべてのインスタンスを検索し、それらを replace と交換します。最後の c は、vi が変更のたびにプロンプ​​トを表示するようにします。

\(\d*\);\(\d*\);\(\d*\)- セミコロンを 3 回押すまでの数。エスケープされた括弧は出力をキャプチャします

\1,\2,\3- エスケープされた数字は、検索文字列で取得したデータを提供します

于 2013-02-15T13:38:10.410 に答える
1

すべての「;」を想定 数字の間にあります:

:%s/\(\d\);\(\d\)/\1,\2/g

または、「;」を探している場合 スペースが先行しない

:%s/ \@<!;/,/g
于 2013-02-15T13:40:46.917 に答える
1
:%s#\([^ ]\);\([^ ]\)#\1,\2#g

説明:

は、すべての%行にコマンドを適用します。

置換コマンドは、使用する区切り文字を気にしません。の後の最初の文字を使用しsます。(たくさんの)バックスラッシュが使用されている場合は、例を使用します#

("not-a-space" ; "not-a-space") を取り、それを (1 番目の "not-a-space" 、2 番目の "not-a-space") に置き換えます。

g行末にあると、行ごとにすべての出現箇所が置き換えられます(最初のものだけでなく)

于 2013-02-15T13:44:00.000 に答える
1

「0以上」ではなく「1つ以上」の数字に一致するビリーの回答の変形:

:%s/\v(\d+);(\d+);(\d+)/\1,\2,\3

「少なくとも2」桁に一致する別のもの:

:%s/\v(\d{2,});(\d{2,});(\d{2,})/\1,\2,\3
于 2013-02-15T13:45:28.970 に答える