Более точное сопоставление с шаблоном - одно с меньшим количеством ложных совпадений для строк, которые не в формате XxxYyyZzz, - это:
sed 's/\([A-Z][a-z][a-z]*\)\([A-Z][a-z][a-z]*\)\([A-Z][a-z][a-z]*\)/\1 \2 \3/'
Рассмотрим входные данные:
XxxYyyZzz
xxxYyyZzz
X xY yZ z
Еще один ответ, который я вижу, вставит пробелы во все строки - когда он должен только изменить первую строку.
Обновлено с учетом примера QcfEfEfs
- из вопроса не ясно, сколько строчных букв в строке допускается. Это может быть 1 или 2; или это может быть 1 или более - использование *
допускает 1 или более; в противном случае используйте \{1,2\}
для 1 или 2.