xargs sed diferença sob MacOS e Linux

0

Tive que migrar para o Mac OS no meu novo local de trabalho, encontrei o comportamento sed que não consigo entender.

existem

$ git ls-files | wc -l
1414 

arquivos sob controle git.

$ git grep /var/log/storm
file1:        conf.put(Config.STORM_WORKERS_ARTIFACTS_DIR, "/var/log/storm/workers-artifacts/");
file2:        conf.put(Config.STORM_WORKERS_ARTIFACTS_DIR, "/var/log/storm/workers-artifacts/");
file3:        conf.put(Config.STORM_WORKERS_ARTIFACTS_DIR, "/var/log/storm/workers-artifacts/");
file4:        conf.put(Config.STORM_WORKERS_ARTIFACTS_DIR, "/var/log/storm/workers-artifacts/");

Existem 4 ocorrências de /var/log/storm/ , uma em um arquivo. Quero substituí-los por outro caminho, MEGAPATH

Linux:

$ git ls-files | xargs -n1 sed -i s+/var/log/storm+MEGAPATH+g
$ git diff --name-only | wc -l
4

Mac OS:

$ git ls-files | xargs -n1 sed -i '' s+/var/log/storm+MEGAPATH+g
$ git diff --name-only | wc -l
78

exportando LC_ALL = C ou / e LANG = C não ajudou.

Por que isso está acontecendo? Qual é o caminho certo?

UPD Bem, a coisa realmente se aplica a sed , todas as coisas git e xargs são realmente não relacionadas a esse problema. Desculpe pela introdução enganosa.

O problema foi realmente causado por mac's sed adicionando 0x0A (newline) no final de todos os arquivos, que originalmente não tinham o símbolo newline, portanto, uma lista diff tão grande. Veja este

Corrigido movendo para gsed :)

    
por DimG 28.11.2017 / 17:12

0 respostas