特定の拡張子を持つファイルを繰り返し、部分文字列のすべての項目を変更します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