Intereting Posts
сопоставление sed шаблонов с удалением по строке статически связать инструмент libtiff включение numa для Intel Core i7 Как установить параметры автоматического монтирования по умолчанию для съемных носителей? Как запускать несколько сценариев одновременно? Как заставить ядро ​​Linux «заморозить» (или почти заморозить) на несколько сотен миллисекунд sed, разделяя переменную (предоставляющую число) из инструкции для вставки текста по определенной строке Советы по отладке Wi-Fi в командной строке? Как получить все журналы за определенный месяц? аутентификация открытого ключа без файла authorized_keys Задайте порядок сортировки с помощью LC_COLLATE, поэтому строчные буквы расположены до верхнего регистра Установка armhf libboost-python-dev в среде amd64 cross environ HTML5 Parser / wrapper Как избежать текста в команде awful.util.spawn_with_shell? Объединить ассоциативные массивы Bash

Какие специальные символы выполняет синтаксический анализ grep по умолчанию?

Возможный дубликат:
В регулярном выражении, какие символы нужно ускользать?

Я знаю, что существует флаг -E который рассматривает термин «поиск» как регулярное выражение. Однако кажется, что даже без этого grep обрабатывает некоторые персонажи специально.

Например, если я запускаю:

 grep "$var" * 

Затем он перечисляет каждую строку файла (я предполагаю, что он использует $ в качестве конечного регулярного выражения). Этот период также, по-видимому, ищет любого персонажа при определенных обстоятельствах.

Итак, каковы специальные символы, о которых мне нужно быть осторожными при использовании grep ?

По умолчанию grep использует Basic Regular Expressions (BRE). Взгляните на любой ресурс в BRE (например, man grep и man regex ), чтобы узнать синтаксис. $ В "$var" не передается grep вообще, потому что он является особым для оболочки. Если у вас есть переменная оболочки с именем var ее расширение – это то, что действительно видит grep . Если вы этого не сделаете, тогда grep просто получит пустую строку, которая соответствует всем.

EDIT: из спецификации POSIX для BRE специальные символы: * , ^ , $ ^ , [ , \

Если вы просто хотите сопоставить литеральные строки, не беспокоясь о том, какие символы имеют особое значение в BRE, вероятно, вы, вероятно, будете использовать fgrep / grep -F (они одно и то же, оба соответствуют фиксированным строкам).