egrep -o: различное поведение в Linux и MacOS - PullRequest
0 голосов
/ 14 мая 2018

У меня есть два сценария, которые я хотел бы запустить как на компьютере с Linux, так и на компьютере MacOS. Но другое поведение команды egrep заставляет эти сценарии генерировать разные выходные данные.

В частности, это то, что происходит, когда я использую egrep в Linux (Ubuntu):

$ echo ".test" | egrep "[a-zA-Z0-9]*"
.test
$ echo ".test" | egrep -o "[a-zA-Z0-9]*"
test
$

и вот что происходит, когда я использую egrep на MacOS

$ echo ".test" | egrep "[a-zA-Z0-9]*"
.test
$ echo ".test" | egrep -o "[a-zA-Z0-9]*"

$

Первое поведение - это то, что я ожидал, второе (пустой вывод) неожиданно. Возможно, это ошибка в реализации egrep с опцией -o под MacOS?

Или, если второе поведение также верно, знаете ли вы способ получить то же поведение для второго случая?

Я попытался просмотреть соответствующие man страницы для двух команд, это извлечено из справочной страницы Linux:

 -o, --only-matching
        Print only the matched (non-empty) parts of a matching line, with each 
        such part on a separate output line.

и это извлечено из справочной страницы для MacOS:

 -o, --only-matching
         Prints only the matching part of the lines.

Хотя описания выглядят немного по-разному, значение этих двух параметров, кажется, одинаково, так почему же egrep -o ведет себя по-разному в MacOS? Разве я не рассматриваю какой-либо тонкий аспект этой команды?

1 Ответ

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

Это зависит от того, как различные реализации grep работают с пустыми совпадениями ([a-zA-Z0-9]* соответствует пустой строкой).

Я написал более длинный текст об этом в Unix & Linux.

Короче говоря, должны ли быть возвращены все пустые совпадения? Таких совпадений бесконечно много.

...