grep в Debian и OSX разные результаты

#macos #docker #debian

Вопрос:

У меня есть файл Dockerfile, и я хотел бы получить из него файл AIRFLOW_VERSION:

Докерфайл

 ARG AIRFLOW_VERSION="2.1.0" <---- This one
 

Эта команда отлично работает на моем локальном компьютере (OSX):

 export AIRFLOW_VERSION=$(grep "ARG AIRFLOW_VERSION=" /Dockerfile | grep -Eo "d.d.d")
echo $AIRFLOW_VERSION                                                                                                             
2.1.0
 

Но когда я запускаю его на машине Debian (Gitlab Runner), он ничего не находит. Вытащил изображение бегуна локально и дважды проверил, ничего не нашел. Файл есть, нет проблем с отсутствием на неуместном файле.

Ответ №1:

Я считаю, что проблема связана с другой версией grep реализации: GNU для Debian и BSD для Mac OS.

Попробуйте заменить -E на -P : grep -Po "d.d.d" .

Ответ №2:

Вы пытаетесь использовать perl regexpr (PCRE) :

 echo AIRFLOW_VERSION="2.1.0" | grep -Po "d.d.d"
 

В debian -E подразумеваются расширенные регулярные выражения (ERE):

  echo AIRFLOW_VERSION="2.1.0" | grep -oE "[0-9] .[0-9] .[0-9] "