Первая попытка будет
grep '^[^ ]* *[Kk]'
Но это предполагает, что всегда есть только одно имя и никаких инициалов.
В этом примере вы можете использовать опцию -i
и заменить [Kk]
просто на k
Может быть лучше закрепиться на первом двоеточии
grep -i ' k[^:]*:'
Если вы действительно хотите напечатать только фамилию, а не всю строку, вам следует рассмотреть возможность использования awk (или perl)
Обновление: вот как создается первое выражение grep '^[^ ]* *[Kk]'
' apostrophe delimits a parameter that contains spaces
and other so-called meta-characters that the shell might alter
^ caret means start of line
[ brackets mark a set of characters, any one of which is to be matched
^ inside brackets means negation or 'none of the following'
so `[^ ]` means "not a space"
] is the end of the set.
* means 0,1 or more of the prior character
so `[^ ]*` means any contiguous group of characters that does not
contain a space
then we have two spaces
* means 0,1 or more of the prior character
so space space * means 1 nor more spaces.
[Kk] means `K` or `k`
[^:]* means 0,1 or more characters that are not a colon
: followed by a colon