Попробуйте использовать флаг -o
для grep
, чтобы получить только совпадающие части строки:
find . '(' -iname "*.rb" -o -iname "*.yml" ')' -exec grep -o -E 'ENV\[.(.*).\]' {} + | sort -u | cut -d'[' -f 2 | tr -d "']"
Кроме того, я настоятельно рекомендую использовать -exec
] к find
вместо конвейерной передачи к xargs
: