регулярное выражение для поиска буквы после подчеркивания - PullRequest
1 голос
/ 08 сентября 2010

Я хотел бы написать регулярное выражение, используя команду unix, которая идентифицирует все строки, которые не подтверждают в следующем формате

First Leter is UpperCase    
Followed by any number of letters
Underscore
Followed by UpperCase Letter
Followed by any number of letters
Underscore
and so on .............

Количество подчеркиваний является переменным

So valid ones are                                     Invalid ones are
Alpha_Beta_Gamma                                      alph_Beta_Gamma
Alpha_Beta_Gamma_Delta                                Alpha_beta_Gamma
Alppha_Beta                                           Alpha_beta
Aliph_Theta_Pi_Chi_Ming                               Alpha_theta_Pi_Chi_Ming

1 Ответ

4 голосов
/ 08 сентября 2010

grep имеет опцию -v, которая инвертирует совпадение (т.е. возвращает несовпадающие строки).Опция -E переводит grep в режим extended-regexp (что позволяет + и круглые скобки быть исключенными в шаблоне).

Шаблон, который вы можете использовать (разбит для ясности):

^              # beginning of string
  [A-Z]        # a single uppercase letter
  [a-z]*       # zero or more lowercase letters
  (            # start a group
    _          # an underscore
    [A-Z]      # a single uppercase letter
    [a-z]*     # zero or more lowercase letters
  )+           # close the group and it can appear one or more times
$              # end of string

Предполагая, что у вас есть файл test.dat, который содержит 8 строк из вашего вопроса:

grep -E -v "^[A-Z][a-z]*(_[A-Z][a-z]*)+$" test.dat

Возвращает:

alph_Beta_Gamma
Alpha_beta_Gamma
Alpha_beta
Alpha_theta_Pi_Chi_Ming
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...