#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}
в этом случае печатает имя.