Git sed игнорировать двоичные файлы

Подобно этому пользователю У меня возникла проблема при запуске 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 grep -I (заглавная i), чтобы игнорировать двоичные файлы.
phd 28.08.2024 01:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Замените 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 не будут обрабатывать все шаблоны одинаково?

minseong 28.08.2024 02:04

По умолчанию они не будут одинаковыми, например. попробуйте grep 'foo/bar' vs sed 's/foo/bar/stuff/' (это должно быть 'foo/bar' в sed или измените разделитель с / на какой-нибудь другой символ), но это незначительные различия, которые, я уверен, вы можете легко обойти. В противном случае просто используйте . в качестве регулярного выражения grep и живите с тем фактом, что sed затем коснется всех текстовых файлов.

Ed Morton 28.08.2024 02:06

Другие вопросы по теме