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

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

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

напр. abcacb acbbac

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

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

acbbca abccba bacbca и т. д....

решение1

(Решения здесь предполагают, что 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

Это должно сработать:

grep -Ew '[a-c]{3}.*[a-c]{3}'
  • -Eдля сопоставления регулярных выражений
  • -wдля соответствия только словам
  • [a-c]{3}будет соответствовать ровно 3 символам из a-cнабора
  • .*будет соответствовать всему между

Связанный контент