A maneira de abordar isso é usar sed -n
, que imprimirá apenas as linhas que correspondem à (s) expressão (ões) e uma expressão que descreva a linha inteira, mantendo apenas as partes desejadas.
BOOST=$(sed -n 's/^.*BOOST:[ \t]*\([^ \t]*\).*$//p' $INSTALL_INFO)
O trailing /p
informa sed
para imprimir a linha (após a substituição ter sido realizada).
Se os seus "dados que eu quero" puderem conter espaço em branco, fica um pouco mais complicado. Você tem que modificar a expressão para "mastigar" o espaço em branco no final da linha. Eu mudaria para o Perl para poder usar seu modificador "relutante" (um ?
após um operador de repetição):
BOOST=$(perl -ne 'print if s/^.*BOOST:\s*(.*?)\s*$//' install_info.txt)
Claro, com o Perl você pode imprimir a parte que combina em vez de modificar a linha:
BOOST=$(perl -ne 'print $1 if /BOOST:\s*(.*?)\s*$/' install_info.txt)