Как я могу использовать grep и регулярное выражение для отображения имен всего из 3 символов

#linux #unix #grep

#linux #unix #grep

Вопрос:

Я новичок в grep и UNIX. У меня есть образец данных, и я хочу отобразить все первые имена, которые содержат только три символа, например, Lee_example . но у меня возникли некоторые трудности с этим. В настоящее время я использую этот код cat file.txt|grep -E "[A-Z][a-z]{2}" , но он отображает все имена, которые содержат не менее 3 символов, а не только 3 символа

Пример данных

Имя число
Lee_example 1
Hector_exaple 2

Комментарии:

1. Вы хотите grep -E '^[A-Z][a-z]{2}$' ?

2. спасибо за ответ. Но это не то, что я ищу, я бы хотел, чтобы он просто показывал имена с 3 символами, такими как lee_example, а не Hector_example . Поскольку этот код покажет оба

3. grep -E '^[A-Z][a-z]{2}_' ? Не могли бы вы уточнить требования?

Ответ №1:

Вам нужно сопоставить _ после первого имени.

 grep -E "[A-Z][a-z]{2}_"
 

Комментарии:

1. примечание: [A-Z] не будет работать для неанглоязычных имен с умляутами. Вы должны использовать [[:upper:]] и [[:lower:]]

Ответ №2:

С awk :

 awk -F_ 'length($1)==3{print $1}'
 

-F_ сообщает awk разделить входные строки на _ . length($1) == 3 проверяет, имеет ли длина первых полей (имя) 3 символа, и {print $1} в этом случае печатает имя.