私はC++のユーザーで、.at()
を使用してSTLベクタをチェックするコードをいくつか持っています。今度は標準[]
に変更したいと思います。誰もがこれを行うことができるスクリプトを知っていますか?それはスーパーの一般的なスクリプトである必要はありません - ケースのほとんどは.at(i)
またはおそらく.at(a*i+j)
です - しかし手で行うには余りにも多くがあります。私のコード全体で.at()を[]に置き換える
答えて
はこのPerlの演算子を使用します。Perlで
s/\.at\(([^)]+)\)/[$1]/g
s///
オペレータは、 "代替"(検索/置換)です。 //の最初のセットでは、一致させる正規表現を指定します。 2番目の//はそのマッチを置換するか置換するテキストです。
この場合、私は ".at(何でも近づくことはできません)"のインスタンスを見つけて、 "[それらの括約物]"と置き換えます。ワンライナーとして
、
perl -pe's/\.at\(([^)]+)\)/[$1]/g' in.cpp > out.cpp
は、Visual Studioのを使用する場合は、検索/置換プロンプトで次の操作を行います。
何を検索:\.at\({[^)]+}\)
はと交換してください:\[\1\]
正規表現を有効にしておきましょう。
s ///の使い方を追加しても構わないと思いますが。 – ikegami
いいえ、ありがとう。答えを改善することは決して問題ではありません。 – kevlar1818
sed -i 's,\.at(\([^\)]*\)),[\1],g' *.h *.cpp
は、ほとんどの簡単な式で使用できます。しかし、at()へのパラメータ内でかっこを使用すると、これは機能しません。
grep 'at(.*).*)' *.h *.cpp
は、これらのケースを特定し、ランニングはsedスクリプト言っ
前にそれらを変換するのに役立ちます。 P.S. sedをここのようにインプレースで動作させる場合は、バックアップを(たとえばVCS経由で)行います。
編集:投稿する前にsedスクリプトをテストしておく必要があります。今すぐ修正され、テストされました。
sed -e 's/\.at(\([^)]*\))/\[\1]/g
'、\。at(i \)、\ [i \]、g'の何が問題なのですか? –
これは、単一の変数名でのみ機能します。彼はおそらく、後方参照を使用するものを望んでいます。 –
なぜこれをやりたいですか?パフォーマンスの改善のためには、変換前と変換後でそれを確認してください。差が20%未満であれば、変更を元に戻すことをお勧めします –