Bash - команда grep не соответствует странице man

Я пытаюсь понять и прочитать справочную страницу. Тем не менее, каждый день я нахожу все более непоследовательный синтаксис и хотел бы уточнить, не понимаю ли я что-то неправильно.

На странице руководства он определяет синтаксис для grep является grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]

Я получил рабочий пример, который рекурсивно ищет во всех файлах в каталоге ключевое слово.

grep -rnw . -e 'memes

Сейчас этот пример работает, но я считаю его очень несовместимым со страницей руководства. Каталог (который страница руководства написала как [FILE...] но указывает вариант использования, если директория file == на странице man) находится последней. Тем не менее в этом примере он расположен после [OPTIONS] и раньше [-e PATTERN]..., Почему это разрешено, это не следует заданному правилу регулярных выражений при использовании этой команды?

2 ответа

Почему это разрешено, это не следует заданному правилу регулярных выражений при использовании этой команды?

Линии в SYNOPSIS Раздел man-страницы следует понимать не как строгие регулярные выражения, а как краткое описание синтаксиса аргументов утилиты.

В зависимости от конкретного приложения анализатор может быть более или менее гибким в отношении того, как он принимает свои параметры. В конце концов, каждая программа может реализовать любую грамматику для своих аргументов. Поэтому некоторые могут разрешить варианты в начале, в конце или даже между файлами (как правило, с способами обработки неоднозначности, которая может возникнуть, например, чтение из стандартного ввода с -, имена файлов начинаются с -...).

Теперь, конечно, есть несколько способов сделать это, которые являются общими. Например, синтаксис служебного аргумента POSIX.1-2017 12.1 гласит:

В этом разделе описывается синтаксис аргументов стандартных утилит и вводится терминология, используемая в POSIX.1-2017 для описания аргументов, обрабатываемых утилитами.

В вашем конкретном случае ваша реализация grep (вероятно, GNU grep) позволяет передавать параметры между списком файлов, как вы обнаружили.

Для получения дополнительной информации см.:

Вы также можете использовать. grep 'string' * -lR

Другие вопросы по тегам