Intereting Posts
При создании демона init.d, какой файл .service? Свободное пространство в размонтированном разделе Предложения, необходимые для отладки, почему ps -ef застрял Flash-плагин обновлен, но Firefox продолжает говорить мне, что у меня есть старая версия Как я могу показать cd каталог, в который он переключается? Использование ikiwiki через командную строку: Workflow и проблема разрешения Не удалось запустить tomcat6, но статус службы запущен Использование соединения с двумя файлами выходит из строя при больших размерах файлов Где меню «Сессия» в fedora 21 gnome desktop login Как вернуть несколько записей DNS A в определенном порядке с помощью bind9? Файловые системы ext3 root идут только для чтения с прерванным журналом даже после ремонта Что использует память? Как установить приоритет vlan на nic во FreeBSD? Как пометить предыдущий конец файла, следуя за ним (tail -f / less)? Awk: изменить строки в зависимости от следующего

Шаблон Grep для извлечения строк, где второе слово имеет только две гласные

Например, у меня есть файл с контентом

hello world it's nice to see you amazing night what a wonderful day my name is Robert still breathing speaking bottom soul something wrong 

Мне нужно сопоставить те строки, в которых второе слово имеет ровно две гласные. Таким образом, выход должен быть:

 it's nice to see you my name is Robert speaking bottom soul 

Как это сделать с помощью grep?

grep с расширенными регулярными выражениями:

 grep -iE '^[^[:blank:]]+[[:blank:]]+([^aeiou]*[aeiou]){2}[^aeiou]*\>' file 

grep с pcre

 grep -iP '^\S+\s+([^aeiou]*[aeiou]){2}[^aeiou]*\b' file 

perl (честно говоря, я сделал это независимо от комментария steeldriver)

 perl -ane 'print if (lc($F[1]) =~ tr/aeiou/aeiou/) == 2' file 

AWK

 awk '{col2 = tolower($2); gsub(/[aeiou]/,"",col2)} length($2) - length(col2) == 2' file