Подобно этому пользователю У меня возникла проблема при запуске sed всех файлов в репозитории, когда некоторые из отслеживаемых файлов являются двоичными.
Ни git ls-files, ни некоторые решения git-grep по этому вопросу, такие как git grep --full-name -l '.', игнорируют двоичные файлы, поэтому передавайте их в sed.
git ls-files | xargs sed -i '' 's/here/there/g'
вызывает ошибку «sed: ошибка RE: недопустимая последовательность байтов».
Как я могу запустить sed для всех файлов, которые он может запустить, и просто игнорировать двоичные файлы?





Замените git ls-files на git grep -lI .. На самом деле, вероятно, было бы лучше, если бы вы использовали git grep -lI 'here' | ..., чтобы запускать sed только для файлов, содержащих строку, соответствующую регулярному выражению, используемому в вашей команде sed, то есть:
git grep -lI 'here' | xargs sed -i '' 's/here/there/g'
-I Don’t match the pattern in binary files.
Я не был уверен, стоит ли сначала использовать grep для одного и того же шаблона, потому что, возможно, grep и sed не будут обрабатывать все шаблоны одинаково?
По умолчанию они не будут одинаковыми, например. попробуйте grep 'foo/bar' vs sed 's/foo/bar/stuff/' (это должно быть 'foo/bar' в sed или измените разделитель с / на какой-нибудь другой символ), но это незначительные различия, которые, я уверен, вы можете легко обойти. В противном случае просто используйте . в качестве регулярного выражения grep и живите с тем фактом, что sed затем коснется всех текстовых файлов.
i), чтобы игнорировать двоичные файлы.