У вас, похоже, есть текстовый файл с каждым словом в отдельной строке.
Вы можете использовать
grep '^[[:lower:]]*[[:upper:]][[:lower:]]*$' file
См. grep
онлайн-демонстрацию .
^
соответствует началу строки (здесь строка, поскольку grep
по умолчанию работает на основе строки по строке), затем [[:lower:]]*
соответствует 0 или более строчным буквам, затем [[:upper:]]
шаблон соответствует любой заглавной букве, а затем [[:lower:]]*
соответствует 0+ строчным буквам, а $
устанавливает позицию в конце строки.
Если вам нужно сопоставить всю строку ровно с одной заглавной буквой, вы можете используйте
grep '^[^[:upper:]]*[[:upper:]][^[:upper:]]*$' file
Единственное отличие от вышеприведенного шаблона - выражение в скобках [^[:upper:]]
, соответствующее любому символу, кроме заглавной буквы. См. еще одну grep
онлайн-демонстрацию .
Чтобы извлечь слова с одной заглавной буквой внутри, вы можете использовать границы слов, как показано в ответе mathguy. С GNU grep вы также можете использовать
grep -o '\b[^[:upper:]]*[[:upper:]][^[:upper:]]*\b' file
grep -o '\b[[:lower:]]*[[:upper:]][[:lower:]]*\b' file
См. еще одну grep
онлайн-демонстрацию .