Сила grep
- это магия теории автоматов. GREP - это сокращение от Global Regular Expression Print. И он работает, создавая автомат (очень простая «виртуальная машина»: не полная по Тьюрингу); затем он «выполняет» автомат для входного потока.
Автомат - это граф или сеть узлов или состояний. Переход между состояниями определяется входным символом под пристальным вниманием. Специальные автоматы, такие как +
и *
, работают с переходами, которые возвращаются к себе. Классы символов, такие как [a-z]
, представлены веером: один начальный узел с ветвями для каждого символа на «спицах»; и обычно спицы имеют специальный «эпсилон-переход» в одно конечное состояние, поэтому его можно связать со следующим автоматом, который будет построен из регулярного выражения (строки поиска). Эпсилон-переходы позволяют изменять состояние без продвижения вперед в искомой строке.
Редактировать: Похоже, я не очень внимательно прочитал вопрос.
Когда вы вводите командную строку, она сначала предварительно обрабатывается оболочкой. Оболочка выполняет подстановку псевдонимов и подстановку имен файлов. После замены псевдонимов (они похожи на макросы) оболочка разделяет командную строку на список аргументов (разделенных пробелами). Этот список аргументов передается в функцию main()
исполняемой командной программы в виде целого числа (часто называемого argc) и указателя на массив NULL-завершенных ((void *)0
) массивов символов с нулевым символом в конце ('\0'
) .
Отдельные команды используют свои аргументы по своему усмотрению. Но большинство Unix-программ выводит дружественное справочное сообщение, если ему дан аргумент -h
(поскольку он начинается со знака минус, он называется опцией). Программное обеспечение GNU также принимает опцию «long-form» --help
.
Поскольку между различными версиями программ Unix существует множество различий, самый надежный способ узнать точный синтаксис, который требуется программе, - это запросить саму программу. Если это не говорит вам о том, что вам нужно (или это слишком загадочно, чтобы понять), вам следует проверить страницу руководства local (man grep
). А для программного обеспечения GNU вы часто можете получить еще больше информации от info grep
.