betelgeuse:tmp james$ echo " method(a,b,c) "> test1
betelgeuse:tmp james$ echo " method(a,b,c) " > test3
betelgeuse:tmp james$ echo " method({a:a, b:b, c:c})" > test2
betelgeuse:tmp james$ grep "method([^{]" test*
test1: method(a,b,c)
test3: method(a,b,c)
Для объяснения: [ ]
определяет класс персонажа - то есть символ в этой позиции может соответствовать что-нибудь в классе.
^
в качестве первого символа класса является отрицанием: это означает, что этот класс соответствует любому символу, кроме символов, определенных в этом классе.
{
, конечно, единственный персонаж, которого мы заботимся о несоответствии в этом случае.
Таким образом, в некоторых, это будет соответствовать любой строке, которая имеет символы method(
следуют любой символ, кроме {
.
Есть другие способы, которыми Вы могли бы сделать это вместо:
betelgeuse:tmp james$ grep "method(\w" test*
test1: method(a,b,c)
test3: method(a,b,c)
\w
в этом случае (при условии, C локали) эквивалентно [0-9A-Za-z]
. Если вы хотите, чтобы дополнительное пространство, вы можете попробовать:
betelgeuse:tmp james$ grep "method([[:alnum:][:space:]]" test*
test1: method(a,b,c)
test3: method(a, b, c)
betelgeuse:tmp james$
(в синтаксисе Grep, [:alnum:] is the same as
\ ш ;
[: пространство:] refers to any whitespace character - this is represented as
\ s` в большинстве реализаций регулярных выражений)
Что-то вроде 'method ([^ {]'? Или 'method \ s * (\ s * [^ {]', если вы хотите разрешить пробелы.Кроме того, я предлагаю проверить учебное пособие по адресу http://www.regular-expressions.info/ - каждый программист должен знать основные регулярные выражения! – laura