2

私は cocos2dx プロジェクトに取り組んでおり、最近 cocos2dx の最新バージョンに更新しました。これにより、いくつかの警告が発生しましたが、これをクリーンアップしています。

次のようなコードがたくさんあります。

CCPoint somePoint = ccpAdd(this->getPosition(), _someRandomOffset);

メソッド ccpAdd は非推奨です。+ 演算子を優先します。そのようなインスタンスを置き換えたいと思います。Google で検索してみましたが、sed を使用して 2 つの文字列を抽出し、それらを元に戻す方法がわかりません。

CCPoint somePoint = this->getPosition() + _someRandomOffset;

私の質問は、ソース ファイルに対して何らかのスクリプトを使用して、この置換を自動化するにはどうすればよいですか?

sed コマンドが次のようなネストされた ccpAdd コマンドを処理できる場合のボーナス ポイント:

CCPoint somePoint = ccpAdd(this->getPosition(), ccpAdd(one, two));

それとも、sed は仕事に適していないツールなのでしょうか?

4

3 に答える 3

1

おもう

sed 's/ccpAdd(\(.*\),\(.*\))/\1+\2/g'

トリックを行います。

ただし、これはネストされたオカレンスでは機能せず、1 行にパターンが複数回出現すると奇妙な結果になります。

残念ながら、sed 貪欲でない演算子がないため、2 番目の問題は別のツールに切り替えることで解決する必要がありますperl

perl -pe 's|ccpAdd\((.*?),(.*?)\)|\1 + \2|g'

perlネストを正しく行うには、一致するものがなくなるまで同じコマンドを数回再実行するだけです(これは貪欲でない演算子のおかげで機能します)。

于 2013-09-12T08:32:34.417 に答える
-1

私がすることは、使用することです

sed 's/regex to match the old string/new string/'

そして、それをファイルに書き込みます。したがって、次のようになります。

sed 's/regex to match the old string/new string/' > file

もちろん、sed に入力を提供するには、cat の標準出力をリダイレクトするだけです。

cat thefile.txt | sed ...
于 2013-09-12T07:58:44.827 に答える