~のアプローチについてほぼ合意した
ack 'cout.+(.+,){4,}' --cpp
は null 文字列に一致するため、一致し.+
ないことに注意してください。コンマの間に何かがあることを確認する必要があります。また、検索する C++ ファイルのみを選択するようにフラグを追加しました。.*
.*
,,,,
--cpp
ここで、一致するすべての行を削除したいと言ったので、このソリューションを拡張してそれを行う方法を次に示します。もちろん、何か問題が発生した場合に備えて、すべてのソース コードをバージョン管理しておくか、少なくともバックアップを取っておく必要があります。あなたのコードがどのように見えるか正確にはわかりません。コードがケースで機能することをすべて確認する必要があります。
ack が見つけたすべての行が削除したいものであることがわかった場合は、Perl を使用してそれらの行を削除できます。ack は Perl にあり、Perl 正規表現を使用するため、使用する正規表現は同じです。
ack -f --cpp | xargs perl -i -n -e'print unless /cout.+(.+){4,}/'
はack -f --cpp
、ツリー内のすべての C++ ファイルのリストを生成するように ack に指示し、xargs はその Perl コマンド ラインを繰り返し呼び出します。perl の-i
オプションは、"Edit file in place" を-n
示し、Perl に入力ファイルをループする-e
ように指示し、各行に対して実行するコマンドを提供します。この場合、正規表現に一致しない限り、読み取った行を表示するように Perl に指示しています。これにより、一致する行が各ファイルから効果的に削除されます。