Se você quiser ficar com pura bash, você terá que se contentar com a solução de duas passagens. Substituições de string Bash usam globs , como na expansão do nome do caminho, e não expressões regulares. Os únicos caracteres especiais em globs são *
, ?
e []
, cujos equivalentes aproximados em expressões regulares são .*
, .
e []
. Dê uma olhada no Wooledge wiki e as seções da página bash(1)
man em Parameter Expansion
e Pathname Expansion
para mais informações.
Assim como um comentário, uma expansão de duas passagens no bash puro ainda será provavelmente mais rápida do que tentar fazer a mesma coisa invocando um programa externo, então eu não me preocuparia muito com isso.