Usando sed:
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
Dentro do comando sed, o ^
caractere corresponde ao texto que começa com $prefix
, e o final $
corresponde ao texto que termina com $suffix
.
Adrian Frühwirth faz bons comentários nos comentários abaixo, mas sed
com esse objetivo pode ser muito útil. O fato de o conteúdo do prefixo $ e do sufixo $ ser interpretado pelo sed pode ser bom ou ruim - desde que você preste atenção, você deve estar bem. A beleza é que você pode fazer algo assim:
$ prefix='^.*ll'
$ suffix='ld$'
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
que pode ser o que você deseja e é mais sofisticado e mais poderoso que a substituição de variáveis do bash. Se você se lembra que com grande poder vem uma grande responsabilidade (como o Homem-Aranha diz), você deve ficar bem.
Uma rápida introdução ao sed pode ser encontrada em http://evc-cit.info/cit052/sed_tutorial.html
Uma observação sobre o shell e seu uso de strings:
Para o exemplo específico dado, o seguinte também funcionaria:
$ echo $string | sed -e s/^$prefix// -e s/$suffix$//
... mas apenas porque:
- eco não se importa com quantas seqüências de caracteres estão em sua lista de argumentos e
- Não há espaços no prefixo $ e no sufixo $
Geralmente, é uma boa prática citar uma sequência na linha de comando porque, mesmo que contenha espaços, ela será apresentada ao comando como um único argumento. Citamos o prefixo $ e o sufixo $ pelo mesmo motivo: cada comando de edição para sed será passado como uma sequência. Usamos aspas duplas porque elas permitem interpolação variável; se tivéssemos usado aspas simples, o comando sed teria obtido um literal $prefix
e $suffix
que certamente não é o que queríamos.
Observe também o uso de aspas simples ao definir as variáveis prefix
e suffix
. Certamente, não queremos que nada nas seqüências seja interpretado, por isso as aspas simples, para que não ocorra interpolação. Novamente, pode não ser necessário neste exemplo, mas é um hábito muito bom entrar.