Ваша команда grep
ничего не печатает, потому что вы использовали опцию -q
;он просто устанавливает состояние выхода в зависимости от того, соответствует ли файл.
Вы хотите напечатать все имена файлов, которые не соответствуют, поэтому вы можете передать эти имена в sed
.Вы можете сделать это с помощью опции -L
вместе с -z
, чтобы использовать нулевой терминатор вместо новой строки (например, опция -print0
в find
).
Вам также следует использовать -F
обрабатывать строку как фиксированную строку, а не как шаблон регулярного выражения.
find . -type d \( -name ThirdParty -o -name 3rdParty -o -name 3rd_party \) -prune \
-o -type f \( -name "*.java" -o -name "*.cs" -o -name "*.cpp" -o -name "*.cxx" -o -name "*.cc" -o -name "*.c" -o -name "*.h" -o -name "*.scala" -o -name "*.css" -o -name "*.js" \) -print0 |
xargs -0 grep -Lz -F "/*RIGHTS AND ETC ETC ETC/*" |
xargs -0 sed -i ...