egrep
равно grep -E
, поэтому оно будет конфликтовать с переключателем -P
.
Если у вас есть GNU grep, вы можете сделать это:
grep -oP '(?<=dag_id=.)\w+' bigquery_pipeline.py
или более точно:
grep -oP '(?<=dag_id=\x27)\w+' bigquery_pipeline.py
Где 0x27
- это код '
ascii.
Вы также можете изменить внешние кавычки, например:
grep -oP "(?<=dag_id=')\w+" bigquery_pipeline.py
или более совместимые с вашим .py
путь кода:
grep -oP 'dag_id\s*=\s*[\x27\x22]\K\w+' bigquery_pipeline.py
, который также будет соответствовать dag_id = "my_bigquery_pipeline"
, и даст результат my_bigquery_pipeline
.
И sed
решение:
sed -n '/^.*dag_id *= *[[:punct:]]\([[:alnum:]_]*\).*/s//\1/p' bigquery_pipeline.py
my_bigquery_pipeline
Чтобы избежать закомментированных строк:
grep -oP '^\s*[^#]+.*dag_id\s*=\s*[\x27\x22]\K\w+' bigquery_pipeline.py
или
sed -n '/^[^#]*dag_id *= *[[:punct:]]\([[:alnum:]_]*\).*/s//\1/p' bigquery_pipeline.py
и perl
решение для необязательного dag_id=
, а также игнорируйте закомментированные строки:
perl -nle 'print $& while m{[^#]*with DAG\((dag\s*=\s*)?[\x27\x22]\K\w+}g' bigquery_pipeline.py