2016-07-10 2 views
-1

Я пробую эту команду, чтобы найти и заменить строку в моем проекте андроида.Найти и заменить строку во всех файлах рекурсивной проблемой

find . -name '*.java' -print0 | xargs -0 sed -i "" "s;//\#Logger\.;Logger\.;g" 

// # Регистратор. => Логгер.

Это работа, но в некоторых файлах есть неожиданные изменения. С git diff я получаю:

-} 
\ No newline at end of file 
+} 

Как это исправить?

+0

Я думаю, что это должно быть xargs -0 sed -i {} "s ...." –

+0

Т.е. вероятно, вы забыли {} –

+0

sed: {}: Нет такого файла или каталога – phnmnn

ответ

1

Ну, только что выяснилось, проблема. Ваш код должен работать следующим образом (убрать redundand «» после того, как -i в СЕПГ):

find . -name '*.java' -print0|xargs -0 sed -i "s;//\#Logger\.;Logger\.;g" 

В качестве альтернативы вы можете использовать параллельные вместо xargs и запустить это еще быстрее:

find . -name '*.java' -print0|parallel -0 sed -i "s;//\#Logger\.;Logger\.;g" {} 

И предложил ниже находке .. -exec вариант:

find . -name '*.java' -exec sed -i "s;//\#Logger\.;Logger\.;g" {} +; 
+0

Вы правы, найдите -exec - хороший. Выяснил свою ошибку, изменив ответ. –

+1

Плюс 1 для определения вопроса '-i". – John1024

+0

Я пробую первый вариант, ошибка: sed: 1: "./android_project/build/ ...": неверный код команды. – phnmnn

Смежные вопросы