Есть ли простой способ передать «сырую» строку в grep?

grep не может быть «сыро» «сырой» строки при использовании из командной строки, поскольку некоторые символы необходимо экранировать, чтобы их не обрабатывали как литералы. Например:

$ grep '(hello|bye)' # WON'T MATCH 'hello'
$ grep '\(hello\|bye\)' # GOOD, BUT QUICKLY BECOMES UNREADABLE

Я использовалprintf для автоматического выхода из строк:

$ printf '%q' '(some|group)\n'
\(some\|group\)\\n

Это создает экранированную bash версию строки, и с помощью обратных галочек это можно легко передать вызову grep:

$ grep `printf '%q' '(a|b|c)'`

Однако это явно не предназначено для этого: некоторые символы в выходных данных не экранированы, а некоторые - излишне. Например:

$ printf '%q' '(^#)'
\(\^#\)

^ символ не должен быть экранирован при передачеgrep.

Есть ли инструмент Cli, который берет необработанную строку и возвращаетa bash-escaped version of the string that can be directly used as pattern with grep? Как я могу добиться этого в чистом виде, если нет?

Ответы на вопрос(4)

Ваш ответ на вопрос