Czy istnieje łatwy sposób na przekazanie „surowego” ciągu znaków do grep?

grep nie można podawać „surowych” ciągów, gdy są używane z wiersza poleceń, ponieważ niektóre znaki muszą być unikane, aby nie były traktowane jako literały. Na przykład:

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

Korzystałemprintf do ciągów automatycznej ucieczki:

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

Tworzy to ciąg znaków w postaci bash-escape, a używając backticks, można go łatwo przekazać do wywołania grep:

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

Jednak nie jest to przeznaczone do tego celu: niektóre znaki na wyjściu nie są zbierane, a niektóre niepotrzebnie. Na przykład:

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

The^ postaci nie należy uciekać, gdy zostanie ona przekazanagrep.

Czy istnieje narzędzie cli, które pobiera surowy ciąg i zwracawersja ciągu znaków z unikalnym bashem, która może być bezpośrednio używana jako wzorzec z grep? Jak mogę to osiągnąć w czystym bashu, jeśli nie?

questionAnswers(3)

yourAnswerToTheQuestion