한 줄에 여러 번 발생하는 경우 sed가 올바르지 않음 - 전역 플래그가 무시됨

한 줄에 여러 번 발생하는 경우 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이 명령은 파일에 두 번째로 나타나는 모든 항목을 삭제하는 것 같습니다 .

전체 파일은 다음과 같습니다.

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

관련 정보