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?