スペースで区切られた数字を含む.txtファイルがあります。
40.766375 -84.267443
40.766355 -84.267463
40.766325 -84.263443
...
場合によっては、最初の列に小数点以下6桁の数字がない場合があります。
40.76632 -84.263443
この問題が発生するたびに、最後にゼロを挿入して次のような結果を得たいと思います。
40.766320 -84.263443
行が多すぎて(36000以上)正規表現を使用してこれを実行したいと思います。どんなアイデアがありますか?
編集:似たようなものが必要なようですが、
:%s/\.d{5}/\.d{5}0
そこに行くことはできません。
答え1
:%s/\(\.\d\{5\}\) /\10 /
これはあなたが望むことをすることができます。
説明する
\(\.\d{5\}\)
最初に表示される点(\.
)と5つの数字()をキャプチャします\d\{5\}
。また、キャプチャグループの後にスペースを残して、正確に5つのキャプチャグループがあることを確認します。
置換の2番目の部分は、\1
最初(そして1回)のキャプチャグループにアクセスするために使用され、0
その後にスペースを入れ、スペースが正規表現と一致しますが、2番目の部分には送信されないため、スペースを入れます。
グループキャプチャに関するいくつかの情報:\10
まさに「グループ番号1キャプチャ、その後に0が続く」。したがって、8つのグループにのみアクセスできます。
答え2
すべての数字にピリオドの後に 6 桁の数字があるようにする、より一般的な方法で次のことができます。
:%s/\.\d\+/&00000/g
:%s/\.\d\{6}\zs\d*//g
最初は5つのゼロを追加し、2番目はピリオドの後の最初の6桁を除くすべての数字を削除します。\zs
これはvim
、一致する部分の先頭をリセットするのと同じですperl
。\K
次のこともできます。
:%s/\d\+\.\d\+/\=printf("%.6f", str2float(submatch(0)))/g