Как избежать метасимволов для egrep, как метакод из Perl?

Perl имеет функцию metaquote() чтобы избежать всех специальных символов для регулярного выражения.

Существует ли эквивалентная техника для egrep ?

Пример. Если я ищу строку abc.def.ghi , мне нужно помнить, что нужно избегать точек вручную, например, abc\.def\.ghi

Я предполагаю, что egrep не имеет встроенного режима / функции для этого, но я открыт для «однострочных» в Perl / sed / awk для имитации metaquote() для egrep . Кроме того, metaquote() Perl может работать в тривиальных случаях, но синтаксис регулярного выражения отличается между egrep и perl .

Используйте опции -F , чтобы сделать шаблон лечения grep как фиксированную строку:

 grep -F 'abc.def.ghi' <file 

А также обратите внимание, что вам не нужно вызывать egrep .

Вы должны сделать это сами: эта команда sed quotemeta любого не-буквенно-цифрового символа, что и делает quotemeta (IIRC)

 str="abc.def.ghi" escaped=$(sed 's/[^[:alnum:]]/\\&/g' <<< "$str") echo "$escaped" # => abc\.def\.ghi 
  1. мы ожидаем, что это будет соответствовать, потому что оно использует исходную строку как регулярное выражение

     $ echo "foo bar abc-def-ghi baz" | grep "$str" foo bar abc-def-ghi baz 
  2. мы ожидаем, что это не будет соответствовать, потому что оно использует экранированную строку.

     $ echo "foo bar abc-def-ghi baz" | grep "$escaped" $ echo $? 1 
  3. мы ожидаем, что это будет соответствовать, потому что оно использует экранированную строку.

     $ echo "foo bar abc.def.ghi baz" | grep "$escaped" foo bar abc.def.ghi baz