Найти уникальные имена, содержащие последовательные повторяющиеся согласные

Я только начинаю изучать, как использовать Ubuntu, и у меня возникают некоторые трудности.

Я должен использовать обратные ссылки, чтобы найти уникальные имена девочек, содержащие последовательные повторяющиеся согласные в файле имен детей, который я сохранил как allnames.txt.

Я использовал:

$ cat allnames.txt | cut -f5 | sort | uniq | grep -i 'bb\|cc\|dd\|ff\|gg\|hh\|jj\|kk\|ll\|mm\|nn\|pp\|qq\|rr\|ss\|tt\|vv\|ww\|xx\|yy\|zz'

и похоже, что это сработало, но есть ли более простой (более короткий) и, возможно, более точный способ сделать это?

1
задан 18 February 2014 в 02:09

3 ответа

Вы можете использовать -u для уникальной сортировки:

cat allnames.txt | cut -f5 | sort -u | grep -Ei '([bcdfghjklmnpqrstvwxyz])\1'

Здесь мы предполагаем, что поля разделены символом табуляции (например, This\tIs\tA\tFriend\tCarlos), так как это разделитель по умолчанию для cut.

Если вам действительно нужно делать это часто, вы, возможно, захотите написать скрипт.

0
ответ дан 18 February 2014 в 02:09

Вы можете попробовать это:

cat allnames.txt | cut -f5 | sort | uniq | grep -Ei '(\w)\1+'

Где -E означает разрешить использование расширенного регулярных выражений

\w означает любые буквенно-цифровые символы плюс _

\1 ссылка на предыдущий символ, основанный (\w) еще раз

+ означает Соответствует предыдущему элементу один или несколько раз. Например, ab + c соответствует «abc», «abbc», «abbbc» и т. Д., Но не «ac».

Только для согласных:

cat allnames.txt | cut -f5 | sort | uniq | grep -Ei '([qrtpsdfghjklzxcvbnm])\1+'

Где [qrtpsdfghjklzxcvbnm] только все согласные

Все цитаты из Википедии .

0
ответ дан 18 February 2014 в 02:09

Рассмотрим файл (name.txt), содержащий следующее,

abbcfgh
askgdf
rtdhher
ueiids
oofyf
asdgfhppn
aettdo

Теперь использование следующей команды будет печатать строки с последовательными повторяющимися согласными,

$ cat name.txt | grep -iEv '([aeiou])\1+' | grep -iE '([a-z])\1+'

abbcfgh
rtdhher
asdgfhppn
aettdo

Как это работает

grep -iEv '([aeiou])\1+' отбрасывает строки с (используя инвертированное совпадение) последовательными повторяющимися гласными. А в следующем grep -iE '([a-z])\1+' перечислены строки с последовательными повторяющимися согласными.

В вашем случае используйте

cat allnames.txt | cut -f5 | sort | uniq | grep -iEv '([aeiou])\1+' | grep -iE '([a-z])\1+'

Особый случай

Приведенное выше не удастся, если есть какое-то слово с двумя последовательными согласными с двумя последовательными гласными , Например, aeeoiffsa. В таких случаях следует использовать

cat allnames.txt | cut -f5 | sort | uniq | grep -iE '([b-df-hj-np-tv-z])\1+'
0
ответ дан 18 February 2014 в 02:09
  • 1
    Хотя Ваш ответ на 100% корректен, это могло бы также стать 100%, бесполезными, если та ссылка перемещена, изменена, объединена в другой, или основной сайт просто исчезает... :-( Поэтому редактирование Ваш ответ и копия соответствующие шаги от ссылки в Ваш ответ, таким образом, гарантируя Ваш ответ в течение 100% времени жизни этого сайта! ;-) можно всегда оставлять ссылку внутри в нижней части ответа как источник для материала... – Fabby 2 August 2015 в 19:44

Другие вопросы по тегам:

Похожие вопросы: