Gibt es eine einfache Möglichkeit, eine "rohe" Zeichenfolge an grep zu übergeben?

grep Bei Verwendung über die Befehlszeile können keine "rohen" Zeichenfolgen eingegeben werden, da einige Zeichen maskiert werden müssen, um nicht als Literale behandelt zu werden. Zum Beispiel:

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

Ich habe benutztprintf um Strings automatisch zu maskieren:

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

Dies erzeugt eine Bash-Escape-Version des Strings und kann mithilfe von Backticks leicht an einen grep-Aufruf übergeben werden:

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

Dies ist jedoch eindeutig nicht beabsichtigt: Einige Zeichen in der Ausgabe werden nicht maskiert, andere sind unnötig. Zum Beispiel:

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

Das^ Das Zeichen sollte bei der Übergabe an nicht maskiert werdengrep.

Gibt es ein Cli-Tool, das eine rohe Zeichenfolge nimmt und zurückgibtEine durch Bash geschützte Version des Strings, die mit grep direkt als Muster verwendet werden kann? Wie kann ich das in pure bash erreichen, wenn nicht?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage