Vim を使用して、文字が N 回以上出現するすべての行を検索するにはどうすればよいでしょうか。

Vim を使用して、文字が N 回以上出現するすべての行を検索するにはどうすればよいでしょうか。

ファイル内で|(パイプ) 文字が 21 回以上出現するすべての行を見つけようとしています。この|文字はフィールド区切り文字なので、インスタンス間に出現する文字数は特に決まっていません|。Vim でこれを簡単に行う方法はありますか?

注: 私は Windows マシンで gVim を使用しているため、*nix 固有のトリックは使用できません。

ティア

答え1

通常の検索機能でこのような行を検索するには、正規表現を使用できます。

/\v(\|[^|]*){21,}

は、オプション\vの値に関係なく正規表現が機能することを保証します(これにより、英数字以外のすべての文字 (アンダースコアを除く) が特別なものになります。また、ここでは、、、、の前にmagicバックスラッシュを置く必要がないようにするためにもこれを使用します)。(){}

このような行をすべて一度に表示したい場合は、次の:gコマンドと組み合わせることができます。

:g/\v(\|[^|]*){21,}/p

ちなみに、このタイプのコマンド(前身6 六) は、ツールの名前の由来ですgrep( g/re/p:re は regexp の略)。


ソース データが「パイプで区切られている」場合は、値にパイプ文字が埋め込まれていないか確認する必要があります (エスケープ (たとえば、バックスラッシュを前に付ける)、重複、または引用符で囲むことによって実行できます)。上記の正規表現メソッドは、ほとんどのエスケープおよび重複メソッドをカバーするように拡張できますが、引用符で囲まれた値を解析するには、通常、ほとんどの正規表現言語が提供できる以上の強力な表現力が必要です。

関連情報