1行に複数回発生した場合、sedが正しくない - グローバルフラグは無視される

1行に複数回発生した場合、sedが正しくない - グローバルフラグは無視される

特定の拡張子を持つファイルを繰り返し、部分文字列のすべての項目を変更しますsed。時には各行が複数回表示されることがあります。これはコマンドです:

find . -type f -name "*.js" -exec sed -i '' s,/.*/marlon/express,/usr/src/app,g {} +

jsファイルを繰り返して、すべてのワイルドカード部分文字列を/usr/src/app

これは単一行の発生に対してうまく機能しますが、複数の行の発生を混乱させるようです。結果は次のとおりです。

__cov_cMGKPxliNj_ByZm9tnD9jQ['/Users/willashworth/Documents/Pimberly/marlon/express/client/js/manifest.js'] = {"path":"/Users/willashworth/Documents/Pimberly/marlon/express/client/js/manifest.js","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}};

...これで:

__cov_cMGKPxliNj_ByZm9tnD9jQ['/usr/src/app/client/js/manifest.js","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}};

'] = {"path":"/Users/willashworth/Documents/Pimberly/marlon/express/client/js/manifest.jsこのコマンドは、ファイルに2番目に表示されるすべてのエントリを削除するようです。

完全なファイルは次のとおりです。

var __cov_cMGKPxliNj_ByZm9tnD9jQ = (Function('return this'))();
if (!__cov_cMGKPxliNj_ByZm9tnD9jQ.__coverage__) { __cov_cMGKPxliNj_ByZm9tnD9jQ.__coverage__ = {}; }
__cov_cMGKPxliNj_ByZm9tnD9jQ = __cov_cMGKPxliNj_ByZm9tnD9jQ.__coverage__;
if (!(__cov_cMGKPxliNj_ByZm9tnD9jQ['/Users/willashworth/Documents/Pimberly/marlon/express/client/js/manifest.js'])) { 
    __cov_cMGKPxliNj_ByZm9tnD9jQ['/Users/willashworth/Documents/Pimberly/marlon/express/client/js/manifest.js'] = {"path":"/Users/willashworth/Documents/Pimberly/marlon/express/client/js/manifest.js","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}};
}
__cov_cMGKPxliNj_ByZm9tnD9jQ = __cov_cMGKPxliNj_ByZm9tnD9jQ['/Users/willashworth/Documents/Pimberly/marlon/express/client/js/manifest.js'];

問題は5行目です

編集する

私はこの答えに基づいてこのコマンドを作成しました。find & sed (検索と置換)

ベストアンサー1

調べました。使用されるfind . -type f -name "*.js" -exec sed -i '' s,/[^]]*/marlon/express,/usr/src/app,g {} +。括弧は、残りの行が貪欲に引き裂かれるのを防ぎます。

私を正しい方向に案内してくれたこの回答に感謝します。https://stackoverflow.com/questions/1685575/sed-regex-to-non-greedy-replace

おすすめ記事