Шаблон регулярного выражения grep вызывает непредвиденное поведение команды
Я ищу строки с $ и последовательно ' или же " через этот grep в моем терминале:
grep "\\$('|\")" -rin folder_path
После нажатия кнопки ввода терминал не считает, что строка завершена, поэтому он добавляет еще одну строку для меня, чтобы продолжать писать. Если я нажимаю Tab во время записи folder_path это показывает эту ошибку:
bash: command substitution: line 107: syntax error: file premature end
bash: command substitution: line 106: unexpected file premature end while searching for `''
Эти сообщения об ошибках были переведены, потому что часть из них показана на португальском языке. Я использую Ubuntu 13.10.
Что случилось?
2 ответа
Использовать этот:
grep -rn "\$\('\|\"\)" /path/to/directory
Ваша проблема на самом деле двоякая:
От
grepс точки зрения, вы используете расширенные регулярные выражения, т.е.(,|,)не избегая их (чтобы относиться к ним особенным) внутри вашего шаблона базовых регулярных выражений. Чтобы преодолеть это, либо избегите всех тех, кто относится к ним особенным, либо-Eвариантgrep,Другая проблема, вызванная вышеупомянутой проблемой, заключается в том, что
$()этоbashшаблон подстановки команд, поскольку вы не избежали соответствующих символовbashлечил шаблон$()в качестве замены команды. Обратите внимание, что\\$()на самом деле делает команду\подстановка команды плюс как первая\сделаю второй\литерал и оставшийся шаблон подстановки команд останутся без изменений.
Также обратите внимание, что -i здесь нет необходимости, так как мы не ищем буквенные символы. Возможно, вас заинтересует печать имен файлов:
grep -Hrn "\$\('\|\"\)" /path/to/directory
Другое дело, что ты можешь сбежать, не сбежав $ (указывает на конец строки) в этом случае, потому что есть символы для сопоставления после $, в следствии grep будем относиться к этому буквально
grep -Hrn "$\('\|\"\)" /path/to/directory
Понятия не имею, что вы делаете неправильно, так как я не так хорош с grep, но вы должны делать это grep "\$'\|\$\"", в основном ищите $'или $", и обратите внимание, что все эти выражения экранированы
Вот пример:
