특정 확장자를 가진 파일을 반복하고 하위 문자열의 모든 항목을 변경합니다 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
이 명령은 파일에 두 번째로 나타나는 모든 항목을 삭제하는 것 같습니다 .
전체 파일은 다음과 같습니다.
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