Вам необходимо использовать регулярное выражение с группой захвата, а не обходные пути, которые не поддерживаются в Bash regex:
regex='base_path:[[:space:]]*"([^"]+)"'
if [[ $config_file =~ $regex ]];then
echo ${BASH_REMATCH[1]};
fi
Вывод:
/modelServers/tests-integration/resources/models/123-model
См. Bash demo online .
Подробности
Положительный (?<=base_path:)
lookbehind и (?=,)
lookahead не поддерживаются в Bash regex.Смысл здесь в том, чтобы сопоставить base_path:
с любым пробелом после него, затем "
, а затем включить в группу 1 любой один или несколько символов, отличных от "
(используя выражение с отрицательными скобками [^"]+
).
base_path:
- буквенная подстрока [[:space:]]*
- 0+ пробельных символов "
- двойная кавычка ([^"]+)
-1 или более символов, отличных от "
char "
- двойная кавычка.