Есть ли простой способ передать «сырую» строку в 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? Как я могу добиться этого в чистом виде, если нет?