регулярное выражение - объединение нескольких условий в grep - PullRequest
1 голос
/ 17 мая 2019

Мне трудно объединить два условия в grep.

Мое первое условие - 'GT' находится в середине строки.

Строки состоят из 12 символов,поэтому GT охватывает позиции от 5 до 6.

Мое второе условие - «C» не появляется до появления «GT» в средней позиции.

Пока у меня есть

grep -E '^.{5}GT' *.txt | grep -E '^[^C]*GT'

, но при этом выводятся недопустимые строки, такие как

GT C TG GT GAGTT

Я полагаю, что код интерпретирует первое вхождение GT как второе условие и позволяет выводить его.

Как я могу сделать улучшения?

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Итак, вы хотите:

  • ровно 5 символов, ни один из которых не является C: [^C]{5}
  • GT
  • любые 5 символов: .{5}

Соединение (привязка между ^...$):

grep -E '^[^C]{5}GT.{5}$' *.txt
2 голосов
/ 17 мая 2019

Использование класса отрицательных символов [^C]* будет соответствовать любому символу, например, также 5 пробелов и, например, также будет соответствовать GT

Если возможные значения GTAC, вы можете повторить либо G, T или A 5 раз, затем сопоставить GT с последующим сопоставлением GTAC 5 раз до конца строки:

^[GTA]{5}GT[GTCA]{5}$

Regex demo

например:

grep -E '^[GTA]{5}GT[GTCA]{5}$' *.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...