sed incorreta para várias ocorrências por linha - ignorando o sinalizador global

0

Iterando arquivos com uma extensão específica e alterando todas as ocorrências de uma substring com sed . Às vezes, há várias ocorrências por linha. Este é o comando:

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

Iterando através de js arquivos para substituir todas as ocorrências dessa substring wildcareded por /usr/src/app .

Isso funciona muito bem em linhas com uma única ocorrência, mas com vários parece desordenar. Isso virou isso:

__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":{}};

... para isso:

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

O comando pareceu remover tudo de '] = {"path":"/Users/willashworth/Documents/Pimberly/marlon/express/client/js/manifest.js , que é a segunda ocorrência desse arquivo.

O arquivo inteiro é:

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'];

Com o problema na linha 5

EDITAR

Eu criei este comando a partir desta resposta: localizar & sed (procurar e substituir)

    
por wmash 23.11.2018 / 14:20

1 resposta

0

Descobri isso. Usado find . -type f -name "*.js" -exec sed -i '' s,/[^]]*/marlon/express,/usr/src/app,g {} + . Os parênteses impedem que ele rasgue avidamente o resto da linha.

Obrigado a essa resposta por me direcionar na direção certa: link

    
por 23.11.2018 / 16:01

Tags