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

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

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

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

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

2 Solutions collect form web for “Как избежать метасимволов для 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 
  • Рекурсивно редактировать файлы на основе имени родительского каталога
  • AWK, SED или GREP для извлечения данных из файла HTML
  • Удалите слова (буквы, за которыми следует пробел) из определенного столбца
  • Греп, который работает с перекрывающимися узорами
  • Поиск строки, с успехом Поиск ближайшего шаблона
  • Использование фиксированных строк в регулярных выражениях?
  • bash - извлекает имена файлов из html-файла, содержащего несколько ссылок
  • Почему одно и то же sed regex (после grep) выходит из строя при запуске в сценарии bash или командной строке bash?
  • Замените строку и замените ее частью
  • Объединить два greps в одну команду
  • Анализ паролей Apache для исключения диапазонов IP-адресов
  • Linux и Unix - лучшая ОС в мире.