A menos que você assuma um shell específico, não há melhor maneira de fazer isso do que “pipe echo to tool” (ou apenas uma “ferramenta” como expr ); é tudo o que você pode realmente contar com o shell Bourne tradicional e / ou o Shell POSIX . Se você considerar outros shells, existem outras possibilidades embutidas.
ksh tem
- padrões extras:
?(pattern-list),*(pattern-list),{n}(pattern-list),{n,m}(pattern-list),@(pattern-list),!(pattern-list); - o especificador
%Pprintf para converter uma expressão regular estendida em um padrão (e%Rpara expressão regular estendida para padrão); - a condição
expr == patternem[[ expr ]]tests; - a expansão do parâmetro
${param/pattern/replacement}.
bash tem
- a opção
extglobpara ativar a maioria dos padrões extras de ksh (sem{n}e{n,m}); - a condição
expr == pattern(em[[ expr ]]tests); - a expansão do parâmetro
${param/pattern/replacement}; - (em versões mais recentes) a condição
expr =~ extregexp(em[[ expr ]]tests) que pode corresponder às expressões regulares estendidas- com subexpressões entre parênteses e o parâmetro
BASH_REMATCH, substituições no estilo sed poderiam ser feitas.
- com subexpressões entre parênteses e o parâmetro
zsh tem
- seus próprios padrões estendidos com a opção
EXTENDED_GLOB; -
ksh - como padrões estendidos com a opção
KSH_GLOB - a condição
expr == pattern(em[[ expr ]]tests); - a expansão do parâmetro
${pattern/pattern/replacement}; - a condição
expr =~ extregexp(em[[ expr ]]tests) que pode corresponder às expressões regulares estendidas,- ele pode usar PCRE em vez de expressões regulares estendidas simples se a opção RE_MATCH_PCRE estiver definida,
- com subexpressões entre parênteses, o parâmetro
MATCHe o parâmetromatch(ouBASH_REMATCHcom o conjunto de opçõesBASH_REMATCH), substituições no estilo sed poderiam ser feitas;
- o módulo
zsh/pcreque oferece os comandospcre_compile,pcre_studyepcre_matche a condição-pcre-matchteste (em[[ expr ]]testes); - o módulo
zsh/regexque oferece a condição-regex-matchteste (em[[ expr ]]testes).