Я пытаюсь написать скрипт, который ищет словарь для слов, которые содержат ровно два вхождения каждой буквы. Я просто не синтаксис grep для ровно двух вхождений буквы.
Если вы хотите найти ровно два экземпляра в любом месте слова, тогда вам нужно будет разрешить произвольные строки без соответствия до, между и после совпадающих символов.
например. найти в любом месте , состоящий из ровно двух экземпляров буквы q, нечувствительных к регистру, в /usr/share/dict/words:
$ grep -wi '[^q]*q[^q]*q[^q]*' /usr/share/dict/words
Albuquerque
Albuquerque's
Qiqihar
Qiqihar's
Если вы не ограничены grep в частности, вы можете рассмотреть возможность использования perl, где вы можете использовать тот факт, что при оценке в скалярном контексте команда tr возвращает количество транслитераций, например
perl -ne 'print if tr/qQ/qQ/ == 2' /usr/share/dict/words
В аналогичном ключе с GNU awk вы можете определить интересующий персонаж как шаблон поля и проверить количество полей:
gawk -vFPAT='[qQ]' 'NF==2' /usr/share/dict/words
Если вы хотите найти ровно два экземпляра в любом месте слова, тогда вам нужно будет разрешить произвольные строки без соответствия до, между и после совпадающих символов.
например. найти в любом месте , состоящий из ровно двух экземпляров буквы q, нечувствительных к регистру, в /usr/share/dict/words:
$ grep -wi '[^q]*q[^q]*q[^q]*' /usr/share/dict/words
Albuquerque
Albuquerque's
Qiqihar
Qiqihar's
Если вы не ограничены grep в частности, вы можете рассмотреть возможность использования perl, где вы можете использовать тот факт, что при оценке в скалярном контексте команда tr возвращает количество транслитераций, например
perl -ne 'print if tr/qQ/qQ/ == 2' /usr/share/dict/words
В аналогичном ключе с GNU awk вы можете определить интересующий персонаж как шаблон поля и проверить количество полей:
gawk -vFPAT='[qQ]' 'NF==2' /usr/share/dict/words