grep -i "^ (.). * \ 1 $" sowpods.txt> output.txt

341
Kappa123

Я использую загруженный список слов «Эрудит» с именем «sowpods.txt» и пытаюсь использовать grep, чтобы найти все слова с этими критериями.

  • 7 буквенное слово
  • Начинается и заканчивается одной и той же буквой
  • Имеет ту же вторую, четвертую и шестую букву
  • Имеет другую 3-ю и 5-ю букву

Линия, которая у меня есть, дает мне ошибку обратной ссылки, поэтому я попытался использовать онлайн-руководства, но они были безумно запутанными. Это вообще возможно? Если да, может кто-нибудь помочь? Спасибо!!!

Я также на Mac и использую терминал по умолчанию.

0
Ваш [предыдущий вопрос] (https://superuser.com/q/1356890/432690) показал, что вам нужно `grep -E` или избегать скобок. Это должно избавить от ошибки обратной ссылки, вы сможете продолжить сейчас. Почему вы спрашиваете (частично) о той же проблеме? Разве решения другого вопроса не работают на Mac? Если они этого не сделают, то правильное решение - дать отзыв пользователям, которые попытались помочь вам, и сначала решить другой вопрос, а не поднимать ту же проблему во второй раз. Kamil Maciorowski 5 лет назад 1
Ах, я не понимал, что проблема была в E, я просто добавил строку, которую мне дали. Хотя я на самом деле не знаю, куда идти из строки кода, которую я сейчас имею :(. Kappa123 5 лет назад 0
Хорошо, тогда. Если другой вопрос решен, пожалуйста, примите один из ответов там (посмотрите наш [тур], чтобы увидеть, как он работает). Вам также следует [отредактировать] текущий вопрос, чтобы в нем не упоминалась «ошибка обратной ссылки», потому что вы знаете, как с ней справиться, и это больше не проблема (и не часть проблемы); сконцентрируйтесь на том, что является реальной проблемой * сейчас *. Если «ошибка обратной ссылки» была вашей * единственной * проблемой, то этот вопрос должен быть удален или, по крайней мере, закрыт как дубликат другого. Kamil Maciorowski 5 лет назад 1
Может ли вторая буква совпадать с первой? Может ли третий быть таким же, как второй? ... Пожалуйста, [отредактируйте свой вопрос] (https://superuser.com/posts/1366807/edit) и добавьте контрольные примеры. Toto 5 лет назад 0

1 ответ на вопрос

1
Toto

Используя -Pопцию (PCRE), если она доступна в вашей системе:

grep -P '^(?=[a-zA-Z]$)(.)(?!\1)(.)(?!\1)(?!\2)(.)\2(?!\1)(?!\2)(?!\3).\2\1$' inputfile 

Объяснение:

^ (?=[a-zA-Z]$) : positive lookahead, zero-length assertion that make sure we have exactly 7 letters. You may use \pL if you want to deal with any laguage (.) : first letter, captured in group 1 (?!\1) : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 1 after (.) : second letter, captured in group 2 (?!\1) : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 1 after (?!\2) : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 2 after (.) : third letter, captured in group 3 \2 : fourth letter == second letter (?!\1) : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 1 after (?!\2) : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 2 after (?!\3) : negative lookahead, zero-length assertion that make sure we don't have the same letter as in group 3 after . : fifth letter \2 : sixth letter == second letter \1 : seventh letter == first letter $ 

DEMO

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