Мне нужно найти вхождения "(+)" в моих сценариях sql (т. Е. Выражения внешнего соединения Oracle). Понимая, что "+", "(" и ")" - все это специальные символы регулярного выражения, я попытался:
grep "\(\+\)" *
Теперь это возвращает вхождения "(+)", но также и другие строки. (Кажется, что-нибудь с открытыми и закрытыми паренами в одной строке.) Вспоминая, что парнины предназначены только для расширенного grep, я попытался:
grep "(\+)" *
grep "(\\+)" *
Обе они возвращали только строки, содержащие "()". Предполагая, что «+» не удается избежать, я попробовал старый трюк:
grep "([+])" *
Это работает. Я перепроверил результат с помощью инструмента без регулярных выражений.
Вопрос : Может кто-нибудь объяснить, что именно происходит с символом «+»? Есть ли менее хитрый способ сопоставления с "(+)"?
(я использую команду cygwin grep.)
РЕДАКТИРОВАТЬ : Спасибо за решения. - И теперь я вижу, что согласно руководству GNU grep, на которое ссылается Бруно, «\+
» при использовании в выражении basic дает «+» его значение extended , и поэтому соответствует одному или нескольким "(" с последующим ")". И в моих файлах это всегда "()".