Я пытаюсь запустить grep со следующим регулярным выражением:
(?<!key:)(?<!orKey:)(?<!isEqualToString:)\@\"[A-Za-z0-9]*\"
Первая попытка:
$ grep -r -n -H -E (?<!key:)(?<!orKey:)(?<!isEqualToString:)\@\"[A-Za-z0-9]*\" ./
-bash: !key: event not found
Хорошо, мне нужно убежать от "!" ...
$ grep -r -n -H -E (?<\!key:)(?<\!orKey:)(?<\!isEqualToString:)\@\"[A-Za-z0-9]*\" ./
-bash: syntax error near unexpected token `('
Хорошо, мне нужно убежать от "(" s ...
$ grep -r -n -H -E \(?<\!key:\)\(?<\!orKey:\)\(?<\!isEqualToString:\)\@\"[A-Za-z0-9]*\" ./
-bash: !key:)(?: No such file or directory
Хорошо, мне нужно процитировать строку?
$ grep -r -n -H -E '\(?<\!key:\)\(?<\!orKey:\)\(?<\!isEqualToString:\)\@\"[A-Za-z0-9]*\"' ./
не возвращает результатов ... но я попробовал более простое регулярное выражение, которое не имеет утверждений с отрицательным просмотром, и оно работало нормально ... Я также использовал TextWrangler с этим регулярным выражением, и он работает, так что я могу только предположим, что я делаю что-то не так в командной строке здесь.
РЕДАКТИРОВАТЬ:
Если я использую опцию -p
:
$ grep -r -n -H -E -P '\(?<\!key:\)\(?<\!orKey:\)\(?<\!isEqualToString:\)\@\"[A-Za-z0-9]*\"' ./
grep: conflicting matchers specified
Пример содержимого файла, которое должно совпадать:
NSString * foo = @"bar";
Пример содержимого файла, которое НЕ должно совпадать:
return [someDictonary objectForKey:@"foo"];