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
:)