Bash - команда grep не соответствует странице man - PullRequest
0 голосов
/ 08 мая 2018

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

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

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

grep -rnw . -e 'memes

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

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

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

Строки в разделе SYNOPSIS справочной страницы следует понимать не как строгие регулярные выражения, а как краткое описание синтаксиса аргументов утилиты.

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

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

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

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

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

0 голосов
/ 08 мая 2018

Вы также можете использовать кредитное плечо. grep ‘string’ * -lR

...