Cygwin - команда egrep для поиска шаблонов в заданном текстовом файле

Меня попросили найти набор слов, которые начинаются с подстроки длины 3 содержащие символы a, b и c и которые дополнительно содержит другую непересекающуюся подстроку, содержащую те же 3 символы

напр. abcacb acbbac

поможет мне найти для этого регулярное выражение. Спасибо

редактировать: abcbac - a, b, c должны быть там как первые 3 буквы, затем a, b, c должны изменить свой порядок по сравнению с предыдущими 3 буквами. всего 6 символьных строк.

acbbca abccba бакбка и т.д ....

0
27.04.2017, 13:39
2 ответа

Это должно сделать это:

grep -Ew '[a-c]{3}.*[a-c]{3}'
  • -E для соответствия регулярным выражениям
  • - w для соответствия только словам
  • [ac]{3} будет соответствовать ровно 3 символам из набора ac
  • .* будет соответствовать любому символу между
0
28.01.2020, 02:33

(Решения здесь предполагают GNU grepпри сборке с поддержкой PCRE (, как это обычно бывает на cygwin )).

Первая половина ваших требований будет означать.

grep -Pwo '(abc|acb|bac|bca|cab|cba)\w*(?1)\w*'

Или, возможно,:

grep -Pwo '(abc|acb|bac|bca|cab|cba)\w*\1\w*'

Для второй половины, которая кажется противоречащей первой половине:

grep -Pwo '(abc|acb|bac|bca|cab|cba)(?!\1)(?1)'

Обнаружит, что слова(слово определяются как последовательность из [a-zA-Z0-9_]символов в данном случае ), которые начинаются с последовательности из 3 символов, состоящей из a, b. ] иc(одна из каждой )следует, но другая из таких последовательностей((?1)ссылается на то же регулярное выражение, что и в первой группе (...))при условии, что она не совпадает с первой(\1ссылается к строке, которая была сопоставлена ​​первой (...)группой захвата, а (?!...)является отрицательным опережающим просмотром оператором ).

$ echo abcbca abcbcax abcabc aaabbb xcabacb abcacb-blah |
    grep -Pwo '(abc|acb|bac|bca|cab|cba)(?!\1)(?1)'
abcbca
abcacb
2
28.01.2020, 02:33

Теги

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